我希望使用模糊搜索进行搜索。使用Luke来帮助我,如果我搜索一个有别名的单词(例如相似的单词),它都会按预期工作:
但是,如果我输入一个没有任何相似词的搜索词(例如序列码),搜索将失败并且我没有得到任何结果,即使它应该是有效的:
我是否需要以不同的方式组织我的搜索?为什么我在第二次搜索中得到的结果与第一次不同,但只有一个“术语”?
您没有指定 Lucene 版本,所以我假设您使用的是 6.xx 您看到的行为是 Lucene Fuzzy Search 的正确行为。
参考这个,我引用,
此查询最多将匹配最多 2 个编辑的字词。
这大致但不是很准确地意味着如果使用FuzzyQuery
.
下面是我在此处说明的一个简单 Java 程序的示例输出,
假设三个索引文档有一个字段,其值如下 - “123456787”、“123456788”、“123456789”(附加 7、8 和 9 至 – 12345678)
结果 :
未找到搜索字符串的命中 -> 123456(编辑距离 = 3,缺少最后 3 位数字)
找到 3 个文档!对于搜索字符串 -> 1234567(编辑距离 = 2)
找到 3 个文档!对于搜索字符串 -> 12345678(编辑距离 = 1)
找到 1 个文档!对于搜索字符串 - > 1236787(编辑距离 = 2 找到一个,缺少 4 、 5 和剩余两个文档的最后一位)
未找到搜索字符串的命中 -> 123678789(编辑距离 = 4,缺少 4、5 和最后两位数字)
所以你应该阅读更多关于Edit Distance的内容。
如果您的要求是匹配 N-Continuous 字符而不担心编辑距离,那么使用 NGramTokenizer 的 N-Gram Indexing是不错的选择。
有关N-Gram的更多信息,请参阅此内容