2010-09-01 135 views
3

我有一長串單詞,我把它放入一個非常簡單的SOLR/Lucene數據庫中。我的目標是從列表中找出單詞查詢中的「相似」單詞,其中'相似性'具體理解爲(damerau)levensthein編輯距離。我瞭解SOLR爲拼寫建議提供了這樣的距離。如何配置solr/lucene來執行levenshtein編輯距離搜索?

在我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 /哈羅 - 溫克勒/ n元搜索返回和沒有做額外的東西一樣tfidfboost等收錄?某處是否有SOLR的裸機配置示例?我發現許多選項真的讓人望而生畏。

q=term:webspace~0.1&sort=strdist("webspace", term, edit) desc 

更多細節herehere

回答

6

如果您使用的是每晚構建,那麼你就可以根據Levenshtein距離使用strdist功能排序結果非常適合這個應用程序。你可能會過得更好。與SimMetrics library。它提供了一套完整的字符串距離計算器,哈羅 - 溫克勒,萊文施泰因等

+0

只需要補充說,對於所有版本的Solr版本,對於所有版本都是如此,無需再進行每晚構建。 – ilinca 2014-11-24 14:55:16

+0

strdist()將在Solr 4.10版本上工作? – iNikkz 2014-12-16 11:56:22

1

的Solr/Lucene的沒有出現:

+0

這確實是一個非常有趣的鏈接。我希望有一個像python一樣的全面的標準庫。不幸的是,由於我不得不搜索數十萬字,沒有索引的解決方案可能會太慢(但我必須先嚐試)。另外,我不太清楚如何將java庫集成到我的python項目中。也許通過HTTP。 – flow 2010-09-04 16:39:32

1

如何配置SOLR執行levensthein /哈羅 - 溫克勒/ n元 搜索與所返回的分數和沒有做額外的東西一樣 TF,IDF,升壓等收錄?

你已經得到了一些如何獲得所需結果的解決方案,但實際上沒有人回答你的問題。

q={!func}strdist("webspace",term,edit)將覆蓋用Levenstein距離的默認文檔評分,q={!func}strdist("webspace",term,jw)對Jaro-Winkler也是如此。

上面提到的排序在大多數情況下都可以正常工作,但它不會改變評分函數,它只是對使用您想要避免的評分方法獲得的結果進行排序。這可能會導致不同的結果,並且組的順序可能不一樣。

要看哪個最適合&debugQuery=true可能就足夠了。