2

次のsolrフィールドを構成しましたが、検索からいくつかの単語を削除する方法を知りたいと思いました。たとえば、フライドポテトやフライドポテトなどです。stopwords.txtに入れてみましたが、機能しません。solrでも結果が返されます。私が持っているもう一つの質問はです。

テキストに近いまたは分離した2つの単語が含まれている場合に、一致する結果を返すように検索を制限するにはどうすればよいですか。

エビのポーボーイを検索すると、2ではなく1と3が返されます。

  1. エビのポーボーイが好きです
  2. エビ野菜
  3. ポーボーイサンドイッチカテゴリーのエビサンドイッチ

     <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 管理パネルに移動し、分析に移動して、ストップワードを使用したクエリを試してください。それがどのように処理されるかを見てください。

2 番目の場合、Solr は近接検索を提供し~2ます。クエリの後に a を使用して、単語が互いに最大 2 単語離れている必要があることを指定します。

于 2012-06-26T21:49:19.063 に答える