0

自分のサイトで Solr を検索エンジンとして使用していますが、同義語の一致以外はすべてうまくいっています。

私の synonym.txt ファイルは次のようになります。

uk => united kingdom,england,scotland,wales

これは、「英国」とマークされた結果を返す場合に機能しますが、その他の場合は機能しません。順序を逆にすると、「英国」の結果は返されません。

私のフィールドタイプは次のようになります。

<fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SynonymFilterFactory" tokenizerFactory="solr.KeywordTokenizerFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
      </analyzer>
    </fieldType>

私はsolrにかなり慣れていないので、どんな助けも大歓迎です!

4

2 に答える 2

2

wikiでは、インデックス時にのみ SynonymFilter を使用することをお勧めします。また、"expand" フラグを true に設定してみてください。これは、複数の単語の類義語を処理するための推奨されるアプローチです。

于 2012-08-16T19:44:20.493 に答える
0

synonyms.txt: と => には 2 つの演算子があり、どちら一方を使用していると思います。

=> 演算子は、テキストの 1 ビットを別のビットに置き換えます。これは、正規化に非常に役立ちます。利点: インデックスを大きくせず、あいまいさを追加しません。欠点: フィルターをインデックスとクエリの両方に適用する必要があります。例: しない => しない 構造的に、あるテキストを別のテキストに置き換えるので、リストを持つことはできません

、演算子は、テキストの 1 ビットを他のすべてのビットに展開します。インデックスのみに使用することをお勧めします (すべての類義語がインデックスに含まれ、任意の単語と一致します)。欠点: インデックスが大きくなります。 , 演算子もクエリ時にのみ使用できますが、複雑なクエリを作成すると動作を予測するのが非常に難しくなり、リクエストが遅くなります。したがって、お勧めしません。

期待どおりの動作をさせるには、次のように書く必要があります:
uk,united Kingdom,england,scotland,wales

使用するトークナイザーによっては、複数の単語に関連する問題が発生する可能性があることに注意してください (これについては既に多くのトレッドがあります)。「kingdom」を検索すると、UK で索引付けされたすべてのドキュメントが見つかります。これは予想される動作である可能性があります...またはそうではありません。

補遺: テキストとして「uk」を「イギリス、イングランド、スコットランド、ウェールズ」に置き換えたい場合があることに気付きました。この場合、, をエスケープする必要があります (私の記憶が正しければ、\ に置き換えてください)。繰り返しますが、検索の結果はトークン化の方法に大きく依存します。

于 2013-08-07T11:18:49.520 に答える