1

PA2456Uまたはのような値の文字列フィールドがPA23U-RBあり、部分一致を実行してPA24、最初の結果を検索して取得するかPA23U-RB、2番目の結果を検索して見つけることができます(完全一致になります)。

ngramを使ってみましたが、数値が無視されるので、入力するとpa111で始まるものが返されますpa

例については、この要点を参照してください。

これは別の質問であるか、関連している可能性がありますが、検索12345001も一致する必要があります12345-001

ありがとう

更新 私が使用した最終的なアナライザーはここにあります:https ://gist.github.com/3803180

4

1 に答える 1

2

ngramを作成することは、要件に基づいて良い選択のように見えますが、edge_ngramsで十分だと思います。このようにすると、インデックスを作成する用語が少なくなるため、インデックスの成長が少し遅くなります。とにかく問題は、同じアナライザーをクエリに適用する必要がないことです。そうしないと、クエリを実行するとpa111、それから作成できるすべてのngramをクエリすることになり、より多くの一致が得られます。 d期待します。

search_analyzerをngramを作成しないアナライザーに変更する必要があります。すでに持っているものと同じものを使用して、ngramトークンフィルターを削除できます(search_analyzerの場合のみ、index_analyzerで問題ありません)。

ダッシュの質問については、Word区切り文字トークンフィルターを参照してください。期待どおりに機能するように構成する必要があります。generate_number_parts=falsegenerate_word_parts=falseおよびsplit_on_numerics=falseオプションを使用すると、希望どおりに機能するはずです。そうすれば、ダッシュはインデックスに登録されません。インデックス時とクエリ時の両方でトークンフィルターを適用する必要があります。

于 2012-09-29T11:39:49.840 に答える