2012-06-26 92 views
2

我配置了以下solr字段,並希望瞭解如何從搜索中消除某些單詞。例如薯條,油炸等。我試圖把它放在stopwords.txt,但不起作用solr仍然返回結果。 我的另一個問題是。排除solr搜索中的單詞或短語

如何限制搜索,例如,如果文本包含兩個詞都接近或分離,它應該返回匹配了如

結果如果我要尋找的蝦poboy它應該返回1和3,而不是2

  1. 我最喜歡蝦poboy
  2. 蝦蔬菜
  3. 大蝦三明治下poboy三明治類

    <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
        <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <!--tokenizer class="solr.KeywordTokenizerFactory"/--> 
    <filter class="solr.LowerCaseFilterFactory"/>  
    <filter class="solr.PatternReplaceFilterFactory" pattern="(;|,|-)\s*" replacement=" " replace="all"/> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/>  
    <filter class="solr.WordDelimiterFilterFactory" 
         generateWordParts="1" 
         generateNumberParts="1" 
         catenateWords="1" 
         catenateNumbers="1" 
         catenateAll="0" 
         preserveOriginal="1" 
         /> 
    <filter class="solr.TrimFilterFactory"/> 
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.keyword.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.KeywordTokenizerFactory"/> 
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
         <filter class="solr.PorterStemFilterFactory"/> 
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
        </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <!--tokenizer class="solr.KeywordTokenizerFactory"/--> 
    <filter class="solr.LowerCaseFilterFactory"/>  
    <filter class="solr.PatternReplaceFilterFactory" pattern="(;|,|-)\s*" replacement=" " replace="all"/>      
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/>     
    <filter class="solr.WordDelimiterFilterFactory" 
         generateWordParts="1" 
         generateNumberParts="1" 
         catenateWords="1" 
         catenateNumbers="1" 
         catenateAll="0" 
         preserveOriginal="1" 
         />  
    <filter class="solr.TrimFilterFactory"/> 
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.keyword.txt" ignoreCase="true" expand="true" tokenizerFactory="solr.KeywordTokenizerFactory"/>  
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
         <filter class="solr.PorterStemFilterFactory"/> 
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
         </analyzer> 
    </fieldType> 
    
+0

我嘗試了你建議的方法,所以如果我只是搜索薯條,沒有什麼是可以返回的,但如果我搜索 炒飯,排除油炸但只搜索大米。有什麼建議麼? – user357086

回答

1

對於希望從搜索中排除的話,你需要在裏面添加其他過濾器:

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 

如果還是不行,請Solr的管理面板,去分析並嘗試使用停用詞的查詢。看看它如何得到處理。

對於第二個,Solr提供鄰近搜索 - 只需在查詢後使用~2來指定單詞需要彼此相距至多2個單詞。

+0

謝謝Ansari。會試一試,讓你知道。還有第三個問題。 當完全匹配「mac&cheese」時,「&」和「and」可以像synonms一樣互換使用 – user357086

相關問題