如何配置solr/lucene来执行levenshtein编辑距离搜索?

flo*_*low 3 lucene solr levenshtein-distance

我有一个很长的单词列表,我把它放入一个非常简单的SOLR/Lucene数据库.我的目标是从列表中为单项查询找到"相似"的单词,其中"相似性"特别理解为(damerau)levensthein编辑距离.我知道SOLR为拼写建议提供了这样的距离.

在我的SOLR中schema.xml,我配置了一个字段类型string:

<fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
Run Code Online (Sandbox Code Playgroud)

我用它来定义一个字段

<field name='term' type='string' indexed='true' stored='true' required='true'/>
Run Code Online (Sandbox Code Playgroud)

我想搜索这个字段,并根据他们的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)
Run Code Online (Sandbox Code Playgroud)

很明显,对于我的应用,术语频率,idfs等是没有意义的,因为每个文档只包含一个术语.我试图使用拼写建议组件,但没有设法让它返回实际的相似性分数.

有谁能够提供线索如何配置SOLR与返回分数和执行levensthein /哈罗-温克勒/ n元搜索没有做额外的东西一样tf,idf,boost等收录?SOLR在哪里有一个简单的配置样本?我发现选项的数量确实令人生畏.

Kar*_*son 6

如果您正在使用每晚构建,那么您可以使用strdist函数根据levenshtein距离对结果进行排序:

q=term:webspace~0.1&sort=strdist("webspace", term, edit) desc
Run Code Online (Sandbox Code Playgroud)

更多细节在这里这里