2012-01-13 41 views
4

Solr的禁用詞問題 - 文檔我使用Solr的-3.4,我的模式的一部分貌似不匹配

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

stopwords_en.txt包含
一個



as

etc ..

現在whe n我搜索「買房」Solr不回我的文本文本「買房」。
另外,當我搜索「買房」Solr不回我的文本文本「買房」。

debugQuery的一部分是

<str name="rawquerystring">cContent:"buy a house"</str> 
<str name="querystring">cContent:"buy a house"</str> 
<str name="parsedquery">PhraseQuery(cContent:"bui ? hous")</str> 
<str name="parsedquery_toString">cContent:"bui ? hous"</str> 

類似(但不準確)的問題被發現here
但是沒有滿意的答案來解決這個問題。

任何想法我該如何解決這個問題?或者什麼是錯的?

+0

你可以去Solr管理分析頁面(http:// localhost:8983/solr/admin/analysis.jsp?highlight = on),併爲「買房子」(檢查詳細輸出)發佈索引和查詢分析? – 2012-01-13 11:34:04

+0

由於字符限制無法粘貼在這裏。但我已經在這裏(http://ameykpatil.weebly.com/solrimage.html) – ameykpatil 2012-01-13 12:38:04

回答

3

您正在使用PhraseQuery進行搜索,所以在「買房子」的第一種情況下將不匹配「買房子」。如果你添加slop(cContent:「buy house」〜2)到PhraseQuery,你也會得到匹配的。

在第二種情況下,雖然停用詞被過濾出來,但它仍然期望在該位置上有東西,所以「買房」將匹配「買一棟房子」,而不是「買房子」。也許slop可以解決這個問題,但我不確定。

+0

感謝O.Klein,這將有助於一定程度上,我仍然必須考慮第二種情況,並消除像「買白色的房子「等,當我使用污水時會被抓到。 – ameykpatil 2012-01-13 15:30:35

0

其實我認爲你的問題是與PorterStemmer - 「房子」正在轉變爲「房屋」。除非你真的認爲你需要它,否則我會關閉porter stemmer。根據我的經驗,它通常會造成更多的傷害而不是好處。