2013-01-17 42 views
2

我使用SOLR 3.6搜索服務器,有一個text_general類型是:edismax不支持CommonGramsQueryFilterFactory?

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /> 
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" /> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /> 
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" /> 
    </analyzer> 
</fieldType> 

但是我發現當我使用edismax搜索「生存還是毀滅」,整個短語將被刪除由於停用詞配置。但我確實使用CommonGramsQueryFilterFactory進行查詢分析。調試顯示:

<str name="rawquerystring">to be or not to be</str> 
<str name="querystring">to be or not to be</str> 
<str name="parsedquery">+()</str> 
<str name="parsedquery_toString">+()</str> 

我在哪裏做錯了? edismax不支持CommonGramsQueryFilterFactory?

回答

0

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.CommonGramsFilterFactory

「使得帶狀皰疹(即the_cat)通過組合普通的令牌(通常一樣的停止詞列表)和定期令牌」。

看起來它只是將普通令牌與常規令牌組合在一起。你試圖做的是將普通令牌與普通令牌相結合,這可能是失敗的原因。

我還沒有嘗試過,但看着使用它,碰到你的問題和這篇文檔。

0

似乎edismax標記查詢並分析它自己的每個術語。 CommonGramsQueryFilter應獲取所有單詞以生成對,但在這種情況下,它會得到術語「to」並且什麼也不做,然後術語「be」並且什麼都不做,等等。

因此,在在這種情況下,CommonGramsQueryFilter什麼都不做,StopFilterFactory刪除所有停用詞並留下一個空查詢。