模糊搜索 - minimumSimilarity 有问题
Fuzzy Search - having issue with minimumSimilarity
我正在使用 Lucene.Net 版本 3.0.3 并使用 StandardAnalyzer 创建索引。
我的索引中有一段文本,模糊搜索似乎对其不起作用。
- 文档中的文本:CUBAEXPORT
- 正在搜索的文本:CUBAEXPOR
- 最低相似度:90%
- 长度(CUBAEXPORT) = 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 取消了这种基于百分比的模糊相似性 tomfoolery)
我正在使用 Lucene.Net 版本 3.0.3 并使用 StandardAnalyzer 创建索引。
我的索引中有一段文本,模糊搜索似乎对其不起作用。
- 文档中的文本:CUBAEXPORT
- 正在搜索的文本:CUBAEXPOR
- 最低相似度:90%
- 长度(CUBAEXPORT) = 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 取消了这种基于百分比的模糊相似性 tomfoolery)