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

对没有别名的单词使用Lucene模糊搜索,lucene,luke,Lucene,Luke,我希望使用模糊搜索进行搜索。使用来帮助我,如果我搜索一个有别名的单词(例如类似的单词),它会按预期工作: 但是,如果我输入的搜索词没有任何类似的词(如序列码),搜索将失败,我将不会得到任何结果,即使它应该是有效的: 我是否需要以不同的方式构建搜索?为什么我在第二次搜索中没有得到与第一次搜索相同的结果,但只有一个“术语”?您没有指定Lucene版本,因此我假设您使用的是6.x.x。 您看到的行为是Lucene模糊搜索的正确行为 请参阅并引用: 最多,此查询将匹配最多2次编辑的术语 这大致但不是

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

但是,如果我输入的搜索词没有任何类似的词(如序列码),搜索将失败,我将不会得到任何结果,即使它应该是有效的:


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

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

请参阅并引用:

最多,此查询将匹配最多2次编辑的术语

这大致但不是非常准确地意味着,如果使用
FuzzyQuery
,任何位置最多两个字符的两个文本将作为匹配返回

下面是我在这里演示的一个简单Java程序的输出示例

假设三个索引文档有一个值如下的字段- “123456787”、“123456788”、“123456789”(附件7、8和9) –12345678)

结果:

未找到搜索字符串->123456(编辑距离=3,最后 3位数字缺失)

找到3个文档!!搜索字符串->1234567(编辑距离=2)

找到3个文档!!搜索字符串->12345678(编辑距离=1)

找到1个文档!!对于搜索字符串->1236787(对于 找到一个,其余两个文件缺少4、5和最后一位数字)

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

因此,您应该阅读有关编辑距离的更多信息

如果您的要求是匹配N个连续字符,而不必担心编辑距离,那么这是一条可行的道路


有关

的更多信息,请参见此页。抱歉,没有早点回来。卢克使用Lucene 3.5。