web-dev-qa-db-ja.com

Solrあいまい類似語の検索

「jahngir」〜0.2のあいまい検索を実行しようとしていますが、結果が返されません。私のインデックスには、データ「JAHANGIRRAHMANMD」のレコードがあります。正確な単語「jahangir」〜0.2で検索してみると、うまくいきます。私が間違っていることについて、誰かが助けてくれませんか。私は、Solrファジー検索がどのように機能するかを理解しようと多くの時間を費やしてきました。 Solrファジー検索を説明するリンクがあれば役に立ちます。以下は、インデックス作成に使用しているテキストフィールドです。前もって感謝します。

 <fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <!-- Case insensitive stop Word removal.
      add enablePositionIncrements=true in both the index and query
      analyzers to leave a 'gap' for more accurate phrase queries.
    -->
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="false"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory"
            ignoreCase="true"
            words="stopwords.txt"
            enablePositionIncrements="true"
            />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    <filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="false"/>
  </analyzer>
</fieldType>

これは、応答後に私のために機能した構成です。ありがとう!

<!-- Modified to fit fuzzy queries -->  
    <fieldType name="text_exact_fuzzy" class="solr.TextField" omitNorms="false">
      <analyzer type="index">
          <tokenizer class="solr.StandardTokenizerFactory"/>
          <filter class="solr.StandardFilterFactory"/>
          <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
14
Ravi

いいえ、ステミングを有効にする必要はありません。ステマーを使用すると問題が発生する可能性があります。

テキストフィールドにフィルターが多すぎます。単語をポーターステムに変換しますが、これは実際の単語ではないことが多く、その音声キーを使用します。表面の単語は、インデックスに保存されている表音キーと一致することはめったにありません。ふりがなは元の単語とは大きく異なります。

管理UIのアナライザーページを使用して、用語がどのように処理されるかを確認します。

近似一致の種類を異なるフィールドに分割することをお勧めします。

  • text_exact:小文字、それだけです
  • text_stem:小文字と語幹
  • text_phonetic:小文字と二重メタフォン、語幹を使わない

入力エラーを処理するため、text_exactであいまい一致を使用します。他のフィールドに対してファジーを使用しないでください。

これらのフィールドに異なる重みを付けることができます。完全一致は他のフィールドよりも高品質の一致であるため、重みを大きくすることができます。語幹一致はふりがなよりも優れているため、重みは正確よりも小さく、ふりがなよりも大きくする必要があります。

19

あいまい検索を機能させるには、目的の言語に対して正しいステミングおよび/またはフィルターファクトリを有効にする必要があります。詳細については、 Solr WikiLangauge Analysis トピックを参照してください。

編集:データのインデックス作成のさまざまな方法とこれがどのように影響するかについての詳細は、 アナライザー、トークナイザー、トークンフィルター を参照してください。データの検索。

0
Paige Cook