【问题标题】:Lucene search and underscoresLucene 搜索和下划线
【发布时间】:2010-03-26 00:44:24
【问题描述】:

当我使用Luke 使用标准分析器搜索我的Lucene 索引时,我可以看到我正在搜索的字段包含MY_VALUE 形式的值。 但是,当我搜索 field:"MY_VALUE" 时,查询被解析为 field:"my value"

有没有一种简单的方法来转义下划线 (_) 字符以便搜索它?

编辑:

2010 年 4 月 1 日上午 11:08(太平洋标准时间)

我认为 Lucene 2.9.1 的标记器中存在一个错误,并且它可能以前就存在。 加载Luke并尝试搜索“BB_HHH_FFFF5_SSSS”,当有数字时,返回以下token:

“bb hhh_ffff5_ssss”

经过一些测试,我发现这是因为数字。如果我输入

“BB_HHH_FFFF_SSSS”,我明白了

“bb hhh ffff ssss”

在这一点上,我倾向于标记器错误,除非数字的存在应该具有这种行为,但我不明白为什么。

谁能证实这一点?

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

    您似乎没有使用 StandardAnalyzer 来索引该字段。在 Luke 中,您需要选择用于索引该字段的分析器,以便正确匹配 MY_VALUE。

    顺便说一句,您可以使用 KeywordAnalyzer 匹配 MY_VALUE。

    【讨论】:

    • 不,我确实使用标准分析器作为索引器,这就是为什么这很奇怪。
    • 如果您使用标准分析器进行索引,那么您的索引将包含“my”和“value”作为两个不同的标记。尝试搜索“我的价值”(包括引号),您可能会得到结果。
    • 我会仔细检查您用于索引的分析器。如果您使用 StandardAnalyzer 进行索引,则不可能将 MY_VALUE 作为术语,因为 StandardAnalyzer 总是以下划线分隔。
    【解决方案2】:

    我认为您无法在此用例中使用标准分析器。

    判断我认为您的要求是什么,关键字分析器应该可以轻松工作(整个字段变成一个术语)。

    我认为当用卢克看场时会出现一些困惑。存储的值不是查询使用的值,您需要的是术语。我怀疑当您查看为您的字段存储的术语时,它们将是“我的”和“价值”。

    希望这会有所帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2011-09-01
      • 2018-09-08
      • 2016-03-05
      相关资源
      最近更新 更多