2011-09-20 73 views
1

我想测试SOLR为我的应用程序找到字符串之间的百分比匹配。Solr Lucene模糊匹配返回错误结果

我现在只为first_name匹配配置了solr和定义的模式,我在schema(solr 3.3)中使用了text_general数据类型。

在我的文档/ CSV我不停词“rushik”和Solr的查询我试图用“rushk”搜索 - 故意去掉“我”

与Levenshtein算法

理想的距离是字符串之间上面的两个1因此字符串之间的百分比匹配应该是(1 - distance/maxLen(string1,string2)),它是(1 - 1/6)= 0.83 - 这意味着两个字符串都是83%的匹配。

但是在solr它的匹配,直到我给查询rushk〜0.79 - 当我使用〜0.80,0.81等它与文档不匹配时。

不知道我的levenshtein字符串匹配的计算是不正确的,或者我怎么确定问题出在哪里。

任何帮助这里是高度赞赏。

谢谢, Rushik。

回答

0

模糊百分比计算进行模糊查询 -

distance = 1 - ((double)dist/(double)Math.min(textlen, targetlen)); 
return (distance > FUZZY_THRESHOLD); 

在你的情况下,将1 - 1/5 = 0.8 因此,这似乎是有效的。

+0

感谢Jayendra,但是在这个计算中我发现使用MAX Length的ppl的大多数地方,你知道为什么SOLR使用MIN设置的确切原因吗? – Rushik

+0

不确定。你可以查看source @ http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FuzzyTermsEnum.java – Jayendra