用短划线搜索Lucene并不会返回一致的结果

时间:2016-08-24 02:24:31

标签: indexing lucene

嗨我有一个问题,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"是无效的,那么似乎是什么问题?

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为我已经得到了答案,根据Lucene doc,StandardAnalyzer使用StandardTokenizer,它是基于以下内容的索引:

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

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