2012-08-16 55 views
0

我在我的網站中使用Solr作爲搜索引擎,並且除了同義詞匹配之外,一切進展順利。匹配「英國」到「英國,蘇格蘭等」。在Solr

我synonym.txt文件看起來像:

uk => united kingdom,england,scotland,wales 

這適用於返回結果標有「英國」,而不是爲別人。如果我顛倒了訂單,那麼「英國」結果不會被退回。

我的字段類型如下:

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.SynonymFilterFactory" tokenizerFactory="solr.KeywordTokenizerFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
     </analyzer> 
    </fieldType> 

我是很新,SOLR所以任何幫助深表感謝!

+1

您是否嘗試使用[調試功能](http://wiki.apache.org/solr/CommonQueryParameters#Debugging)Solr Debugging Ex:../?q=keyword&debugQuery=true。您可以使用分析頁面http:// /solr/admin/analysis.jsp?highlight=on查看字段類型和數據的行爲。 – mailboat 2012-08-16 15:59:45

回答

2

wiki中,建議僅在索引時使用SynonymFilter。另外,嘗試將「擴展」標誌設置爲真,這也是處理多詞同義詞的推薦方法。

0

你有2個運營商在synonyms.txt:=>,我猜您正在使用的,而不是其他。

=>運營商正在用另一個文本取代一個文本,這對於規範化非常有用。優點:它不會增加您的索引並且不會增加含糊性。缺點:您必須將過濾器應用於索引和查詢。 Exple:不=>不 Structuraly,更換另一個文本一文,所以你不能有一個列表

,運營商將擴大文本的一個位到所有其他。建議僅將其用於索引(所有同義詞將位於索引中並與任何單詞匹配)。缺點:它會增加你的索引。 ,運算符也只能用於查詢時間,但在進行復雜查詢時行爲可能非常難以預測,並且會減慢您的請求速度。所以,不推薦。

對有預期的行爲,你應該寫:
英國,英國,英格蘭,蘇格蘭,威爾士

要注意的是取決於所使用的標記生成器,有可能涉及到多字的一些問題(已經有很多關於這方面的內容了):搜索「王國」將查找所有與英國索引的文件。這可能是預期的行爲...或者不是。

附錄:我剛纔意識到你可能想用「英國,英格蘭,蘇格蘭,威爾士」代替「英國」作爲文本。在這種情況下,你必須逃避,(如果我的記憶是正確的,用\代替)。再一次,你的搜索結果將很大程度上取決於它是如何標記的。