2

我已经配置了以下 solr 字段,并想看看如何从搜索中消除一些单词。例如薯条、油炸等。我尝试将其放入 stopwords.txt,但不起作用 solr 仍然返回结果。我的另一个问题是。

如何限制搜索,以便如果文本包含两个接近或分开的单词,它应该返回匹配结果,例如

如果我搜索虾 poboy,它应该返回 1 和 3 而不是 2。

  1. 我喜欢虾仔
  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>
    
4

1 回答 1

1

对于要从​​搜索中排除的单词,您需要在其中添加另一个过滤器:

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

如果它仍然不起作用,请转到 Solr 管理面板,转到 Analysis 并尝试使用停用词进行查询。看看它是如何处理的。

对于第二个,Solr 提供邻近搜索 - 只需~2在查询后使用 a 来指定单词彼此之间最多需要 2 个单词。

于 2012-06-26T21:49:19.063 回答