1

Solr では、solr.ShingleFilterFactory を使用してトークンをマージすると、min/maxShingleSize とマージするトークンに応じて、複数のシングルが生成される場合があります。このため、検索に失敗します。検索が機能するように、複数のトークンを 1 つにマージするにはどうすればよいですか。ここに私の設定があります:

<fieldType name="text_ngram" class="solr.TextField">
    <analyzer type="index">
        <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b \b" replacement=""/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
       <tokenizer class="solr.StandardTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"/>
       <filter class="solr.ShingleFilterFactory" tokenSeparator="" minShingleSize="2" maxShingleSize="7" outputUnigrams="false"/>
       <filter class="solr.LengthFilterFactory" min="6" max="7"/>
   </analyzer>
</fieldType>

クエリ name_ngram:"our G20 9NS" のデバッグ出力は次のとおりです。

"debug": {
    "rawquerystring": "name_ngram:\"our G20 9NS\"",
    "querystring": "name_ngram:\"our G20 9NS\"",
    "parsedquery": "PhraseQuery(name_ngram:\"rg209ns g209ns\")",
    "parsedquery_toString": "name_ngram:\"rg209ns g209ns\"",
    "explain": {},

事前にサンクス、

4

2 に答える 2

0

シノニム マッピングを solr config の外に移動することで、この問題を解決できました。それを処理するカスタムコードをいくつか書きました。最終的なスキーマは次のとおりです。

<!-- Added for NGram field-->
<fieldType name="text_ngram" class="solr.TextField">
  <analyzer type="index">
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b \b" replacement=""/>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="\b \b" replacement=""/>
  </analyzer>
</fieldType>
于 2016-02-01T15:20:44.030 に答える