【问题标题】:Lucene non indexed fields, case insensitive search?Lucene 非索引字段,不区分大小写的搜索?
【发布时间】:2016-01-13 00:37:22
【问题描述】:

假设所有文档都有以下字段:

Field("Id", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
Field("From", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
Field("To", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
Field("Source", Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.NO));
Field("Target", Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));

如果 FromToSource 完全相同(不区分大小写),我的要求之一是重用文档。

但是,它们不会被分析(例如,使用 StandardAnalyzer 在索引之前将术语小写)。

  1. 是否可以对未分析的内容进行不区分大小写的搜索 领域?
  2. Field名称值呢,我也可以做一个案例 对“发件人”、“发件人”、“发件人”的不敏感搜索?

概述: 我想执行不区分大小写的搜索。

示例:“From:something”、“from:Something”、“FROM:SOMething”、“from:SOMETHING” -> 检索相同的结果集。

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    1 - 不可以。您始终可以在索引之前自己将字段小写,或者使用由KeywordTokenizerLowerCaseFilter 组成的分析器对其进行分析。如何在 Lucene 中建立索引很大程度上是一个 GIGO 操作。如果您分析和索引字段的方式无法满足您的搜索需求,那么您将度过一段艰难的时光。

    2 - 再次,不(反正我不知道)。您需要在代码中处理此问题。如果您总是使用小写的字段名称,那么标准化它应该很容易。

    【讨论】:

    • 如果我使用之前未分析的keywordTokenizer 分析所有字段,考虑到其中一些可能是2 个文本段落的大小,它会占用更多空间。这背后的想法是能够对 ex 的源字段进行模糊匹配和精确匹配。我在未分析的 SourceExact 字段和已分析的 SourceFuzzy 字段(StandardAnalyzer)中有相同的文本。这就是为什么我想对 SourceExact 字段执行不区分大小写的搜索。
    • @pelican_george - 不,不应该对空间产生影响。使用KeywordAnalyzer 分析字段并不分析该字段实际上是相同的。从理论上讲,添加 LowerCaseFilter 可以减小索引的大小,但实际上对于长字段,可能根本不会影响大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    相关资源
    最近更新 更多