【问题标题】:Lucene search with dashes does not return consistent results带有破折号的 Lucene 搜索不会返回一致的结果
【发布时间】:2016-08-24 02:24:30
【问题描述】:

您好,我遇到了 Lucene 搜索不返回一致结果的问题。 使用 StandardAnalyzer 完成索引,lucene 版本为 3.0

数据库中的一个示例条目是

A1BC-1-12345678 - AU-01 / 123456 - No.1 ABC DEFG XX-YYY Example Data 

如果我搜索整个字符串,它不会返回任何结果。

如果我取出单个破折号和斜线,请搜索

A1BC-1-12345678 AU-01 123456 No.1 ABC DEFG XX-YYY Example Data

它不会返回任何结果。

如果我用空格替换 XX-YYY 之间的破折号,请搜索

A1BC-1-12345678 AU-01 123456 No.1 ABC DEFG XX YYY Example Data 

--------它返回结果!----------

现在,如果我包含破折号和斜杠,并将 XX-YYY 之间的破折号替换为空格,请搜索

A1BC-1-12345678 - AU-01 / 123456 - No.1 ABC DEFG XX YYY Example Data

它不会返回任何结果。

最后,如果我将 AU-01 和 XX-YYY 之间的破折号替换为空格,请搜索

A1BC-1-12345678 AU 01 123456 No.1 ABC DEFG XX YYY Example Data

它不会返回任何结果。

总之,“XX-YYY”无效,但“AU-01”有效,但“XX YYY”有效,“AU 01”无效,那么问题出在哪里?

我能做些什么来解决这个问题?

【问题讨论】:

  • 你搜索的怎么样了?这很可能与您的分析有关,但如果没有任何细节或代码,很难说出问题所在。

标签: indexing lucene


【解决方案1】:

我想我已经得到了答案,根据 Lucene 文档,StandardAnalyzer 使用 StandardTokenizer,它的索引基于:

  • 在标点字符处拆分单词,删除标点符号。 但是,后面没有空格的点被视为部分 的一个令牌。
  • 在连字符处拆分单词,除非其中有数字 令牌,在这种情况下,整个令牌被解释为一个产品 编号且不拆分。

我认为带有小写过滤器的 WhitespaceAnalyzer 会满足我的需求。

【讨论】:

    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多