2

検索サーバーにSOLR 3.6を使用しており、text_generalタイプは次のとおりです。

<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「to be or not to be」の検索に使用すると、ストップワードの設定により、フレーズ全体が削除されることがわかりました。しかし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 をサポートしていませんか?

4

2 に答える 2

0

edismax はクエリをトークン化し、各用語を独自に分析しているようです。CommonGramsQueryFilter は、ペアを生成するためにすべての単語を取得する必要がありますが、この場合、用語「to」を取得して何もしません。次に、用語「be」を取得して何もしません。

その場合、CommonGramsQueryFilter は何もせず、StopFilterFactory はすべてのストップ ワードを削除し、空のクエリを残します。

于 2014-08-06T07:22:53.283 に答える