我希望使用模糊搜索进行搜索。使用Luke来帮助我,如果我搜索一个带有别名的单词(例如类似的单词),它就会按预期工作:
但是,如果我输入的搜索词没有任何相似的词(例如序列号),则搜索失败并且我没有结果,即使它应该有效:
我是否需要以不同的方式构建搜索?为什么我在第二次搜索中没有和第一次搜索一样,但只有一个“术语”?
答案 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
的更多信息,请参阅此处