我有一个很长的单词列表,我将它们放入了一个非常简单的SOLR / Lucene数据库中。我的目标是针对单个术语查询从列表中找到“相似”的单词,其中“相似性”特别理解为(Damerau)Levenshtein编辑距离。我知道SOLR提供了这样的拼写建议距离。
在我的SOLR schema.xml
中,我配置了一个字段类型string
:
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
我用它来定义一个字段
<field name='term' type='string' indexed='true' stored='true' required='true'/>
我希望能够搜索这个字段,并根据它们的Levenshtein编辑距离返回结果。然而,当我运行像webspace~0.1
这样的查询时,通过启用调试和解释功能,SOLR报告显示计算分数需要考虑很多因素,例如:
"1582":"
1.1353534 = (MATCH) sum of:
1.1353534 = (MATCH) weight(term:webpage^0.8148148 in 1581), product of:
0.08618848 = queryWeight(term:webpage^0.8148148), product of:
0.8148148 = boost
13.172914 = idf(docFreq=1, maxDocs=386954)
0.008029869 = queryNorm
13.172914 = (MATCH) fieldWeight(term:webpage in 1581), product of:
1.0 = tf(termFreq(term:webpage)=1)
13.172914 = idf(docFreq=1, maxDocs=386954)
1.0 = fieldNorm(field=term, doc=1581)
显然,对于我的应用程序而言,术语频率、idf等都是无意义的,因为每个文档只包含一个单词。我尝试使用拼写建议组件,但未能使其返回实际的相似度分数。
请问有人能提供提示如何配置SOLR以执行Levensthein / Jaro-Winkler / N-Gram搜索并返回分数,且不需要执行其他额外的操作,如tf、idf、boost等吗?是否有一个针对SOLR的简洁配置示例?我发现选项的数量真的很令人生畏。