Lucene 具有最小相似性问题的模糊搜索

Lucene 具有最小相似性问题的模糊搜索,lucene,lucene.net,Lucene,Lucene.net,我正在使用Lucene.NETVER3.0.3并使用StandardAnalyzer创建索引 我的索引中有一个文本,模糊搜索似乎不起作用 文档中的文本:CUBAEXPORT 正在搜索的文本:CUBAEXPOR 最低相似性:90% 长度(立方导出)=10 长度(CUBAEXPOR)=9 编辑距离=1 相似性=((10-1)/10)*100=90% 据我所知,CUBAEXPOR的比例肯定是90%,但现在是88% 它基于搜索项的长度和索引项的长度中的较小者。因此,由于搜索词的长度为9,因此0.88

我正在使用Lucene.NETVER3.0.3并使用StandardAnalyzer创建索引

我的索引中有一个文本,模糊搜索似乎不起作用

  • 文档中的文本:CUBAEXPORT
  • 正在搜索的文本:CUBAEXPOR
  • 最低相似性:90%
  • 长度(立方导出)=10
  • 长度(CUBAEXPOR)=9
  • 编辑距离=1
  • 相似性=((10-1)/10)*100=90%
据我所知,
CUBAEXPOR
的比例肯定是90%,但现在是88%


它基于搜索项的长度和索引项的长度中的较小者。因此,由于搜索词的长度为9,因此0.88相似度是允许一个编辑距离的最小值

最大编辑距离的计算如下所示:

int maxEdits = (int)((1-minSim) * (Math.min(textLength, targetLength)));
另外,请记住,浮点精度可能是这里的一个问题!因此,如果您将minSim设置为0.8,并尝试使用5的长度,那么您将有0个maxEdits,因为
(1-(float).8)*5
=.99999994,将其转换为int会得到0

长话短说,我不会过分担心在你的模糊查询中精确地划分界线。

(我很高兴lucene摒弃了这种基于百分比的模糊相似性的愚蠢做法)

你确定长度的较小者是
吗?你检查过源代码了吗?我这么说是因为
CUBAEXPORT
的长度是10,而同一个单词缺少1个字母(10个字母中有1个的差异)是90%相同,这很明显,不是吗@bjan,-是的,我知道源代码,并且我相当完整地解释了它是如何导致您看到的行为的。“CUBAEXPOR”的长度为9个字符,因此您可以看到结果。不清楚吗?如果你不相信我,它是开源的,你可以自己检查一下。我反复询问你的答案,只是因为,对我来说,使用最小长度没有意义。很明显,这两个字符串90%相似,那么为什么要将其设为88%!对于我来说,使用与此行为相关的服务很难让我的客户满意。尽管如此,我并不怪你,事实上我很感谢你至少让我知道不是我算错了(AFAIK)。