我有一长串单词,我将它们放入一个非常简单的 SOLR / Lucene 数据库中。我的目标是从单项查询列表中找到“相似”单词,其中“相似性”具体理解为 (damerau) levensthein 编辑距离。我了解 SOLR 为拼写建议提供了这样的距离。
在我的 SOLRschema.xml
中,我配置了一个字段类型string
:
<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
我用来定义一个字段
<field name='term' type='string' indexed='true' stored='true' required='true'/>
我想搜索这个字段并根据他们的编辑距离返回结果。但是,当我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
s 等是没有意义的,因为每个文档只包含一个词。我尝试使用拼写建议组件,但没有设法让它返回实际的相似度分数。
任何人都可以提供提示如何配置 SOLR 以执行 levensthein / jaro-winkler / n-gram 搜索并返回分数并且不做额外的东西,比如,tf
等等?在某处是否有 SOLR 的基本配置示例?我发现选项的数量确实令人生畏。idf
boost