2012-05-15 82 views
0

對於索引和查詢分析器,我使用SnowballPorterFilterFactory。 當我搜索「專業」的話。 Solr的成功發現,含有「專業」只有文章,但我想要的「專業」「專業」 ......索引和查詢分析器的Solr SnowballPorterFilterFactory

這是schema.xml中的當前配置

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/> 
     <filter class="solr.ASCIIFoldingFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="French"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 

    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
     <filter class="solr.ASCIIFoldingFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="French"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    </analyzer> 
</fieldType> 
+0

我建議去Solr的管理面板,點擊'Analysis'和運行場分析這種類型。同時執行查詢和索引,並查看它們是否以相同的方式被阻止。 – Ansari

+0

同樣看看Solr日誌,看看Porter過濾器工廠是否正確加載,特別是使用額外的語言標記或者是否引發某種警告。 – Ansari

回答

0

正在發生的事情是搬運工超出了你的查詢範圍。當您搜索profession時,您的關鍵字會被忽略爲profess,而professionprofessionalprofessionalism都會被作爲profession存儲在索引中。

要解決這個問題的唯一方法是在不妨礙查詢的情況下添加另一個fieldType

喜歡的東西:

<fieldType name="text_unstemmed_query" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" splitOnCaseChange="1"/> 
     <filter class="solr.ASCIIFoldingFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="French"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
     <filter class="solr.ASCIIFoldingFilterFactory" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    </analyzer> 
</fieldType> 

隨着copyfield,如:

<copyField source="your_text_field" dest="text_unstem_query_field"/>

+0

我不認爲這是問題 - 我自己使用Porter stemmer,之前我從來沒有遇到過這個雙重問題。 – Ansari

+0

我通過Solr分析運行他的設置,這是我得到的結果。 _Profession_被推遲到_profess_並且_professional_在索引中被推到_profession_。他們將不符合他目前的設置。這就是爲什麼有一種分析器類型,一種用於在索引中存儲內容,另一種用於在運行查詢時如何進行比較。 – harmstyler

+0

您好,感謝您的回覆,我驗證了我的日誌並使用了複製域解決方案,但問題仍然存在,請注意我使用edismax查詢解析器。我應該添加*我的q參數?例如:職業* – ZendMind