使用Lucene模糊搜索与没有别名的单词

时间:2017-05-17 11:55:57

标签: lucene luke

我希望使用模糊搜索进行搜索。使用Luke来帮助我,如果我搜索一个带有别名的单词(例如类似的单词),它就会按预期工作:

Fuzzy query with results

但是,如果我输入的搜索词没有任何相似的词(例如序列号),则搜索失败并且我没有结果,即使它应该有效:

enter image description here

我是否需要以不同的方式构建搜索?为什么我在第二次搜索中没有和第一次搜索一样,但只有一个“术语”?

1 个答案:

答案 0 :(得分:0)

您尚未指定Lucene版本,因此我假设您使用的是6.x.x. 您看到的行为是Lucene模糊搜索的正确行为。

参考this,我引用,

  

此查询最多可匹配最多2次修改的条款。

大致但非常准确地表示如果使用FuzzyQuery,在任何位置最多两个字符变化的两个文本将作为匹配返回。

以下是我在此处说明的一个简单Java程序的示例输出

  

让我们说三个索引文档的字段值如下 -   " 123456787" ," 123456788" ," 123456789" (附7,8和9)    - 12345678)

     

结果:

     

找不到搜索字符串的匹配数 - > 123456(编辑距离= 3,最后   缺少3位数字)

     

发现3个文件!! for Search String - > 1234567(编辑距离= 2)

     

发现3个文件!! for Search String - > 12345678(编辑距离= 1)

     找到1个文件!! for Search String - > 1236787(编辑距离= 2表示   找到一个,遗漏了两个文件的4,5和最后一位数字)

     

找不到搜索字符串的匹配数 - > 123678789(编辑距离= 4,   缺少4,5和最后两位数字)

所以你应该阅读更多关于编辑距离的信息。

如果您的要求是匹配N-Continuous字符而不必担心编辑距离,则N-Gram Indexing using NGramTokenizer是可行的方法。

有关N-Gram

的更多信息,请参阅此处