2012-03-21 68 views
1

如何根據最佳匹配進行搜索而不是過濾掉沒有的數據庫行一個的單詞是?有沒有我可以使用的通用標記器或過濾器?如何配置Solr搜索以獲得最佳匹配?

例如,如果我在我的搜索詞是:
greek american

那麼結果集應該包括greekORamerican 所有字符串如果數據庫有以下行:

german food 
americans in paris 
greek americans 
thai food 
greek food 

然後應該返回頂部的最佳匹配,儘管它可能沒有全部/部分搜索詞:

greek americans 
greek food 
americans in paris 
+0

默認情況下,SOLR首先返回最佳匹配。小心與我們分享您爲可搜索文件定義的架構和標記器 – 2012-03-21 21:14:40

回答

0

對我來說聽起來像你的默認操作符是「AND」。下面列出的是在某處你的Schema.xml文件:

<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> 
<solrQueryParser defaultOperator="AND"/> 

如果你希望它是「或」默認情況下,使用<solrQueryParser defaultOperator="OR"/>。否則,使用顯式或在您的查詢:

?q=(greek OR american) 

如果您發佈Schema.xml文件中的相關部分,或許我可以幫助解決一些。

1

這是默認情況下Solr的功能。也許記分員不符合您的期望,您應該開啓debugQuery以更好地理解分數是如何計算的。

給出你的例子,你應該確保你的分析器執行詞幹分析,以便americanamericans以相同的方式進行分析。

開始使用使用TF-IDF進行評分的工具時可能會引起混淆的一件事是,它給罕見術語提供了更好的排名機會。例如,如果american在您的索引中比greek更常見,則對greek restaurant的查詢可能會使希臘博物館的排名高於美國餐館。

您可以通過編寫自己的Similarity來自定義分數的計算方式。