0

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

带有结果的模糊查询

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

在此处输入图像描述

我是否需要以不同的方式组织我的搜索?为什么我在第二次搜索中得到的结果与第一次不同,但只有一个“术语”?

4

1 回答 1

0

您没有指定 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的更多信息,请参阅此内容

于 2017-05-18T05:18:21.233 回答