0

そのため、US-2343 や FX-4321 などのタイトルのドキュメントがたくさんある状況があります .... インデックスのデフォルトのアナライザーとして Snowball アナライザーを使用していますが、この奇妙な問題があります。

次のドキュメントがあるとします US-4321、US-2343、US-2300 ...「us-2300」を検索すると、1 つのドキュメントが期待どおりに表示されます (ハイフンは検索でエスケープされます)。 「us-23*」の場合 ... 何も表示されませんが、「us 23*」(スペースに注意してください) を検索すると、us-2343 と us-2300 が表示されます

なぜこのように機能するのかを理解しようとしています。何か案は?

4

2 に答える 2

2

Analyze APIを使用して、ドキュメントがどのようにインデックス化されているかを確認できます。ご覧のとおり、ドキュメントは と の 2 つのトークンとしてインデックス化されていusます2343

$ curl "localhost:9200/your_index/_analyze?analyzer=snowball&pretty=true" -d "US-2343"   
{
  "tokens" : [ {
    "token" : "us",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "<ALPHANUM>",
    "position" : 1
  }, {
    "token" : "2343",
    "start_offset" : 3,
    "end_offset" : 7,
    "type" : "<NUM>",
    "position" : 2
  } ]
}

を検索する場合us-23*、elasticsearch は で始まるトークンを持つドキュメントを検索しようとしますus-23。これは、ワイルドカード式が分析されないために発生します。ご覧のとおり、snowballパーサーはそのようなトークンを生成しないため、結果は返されません。us2 つのトークンと prefix を持つトークンを検索すると23、結果が得られます。

text_phrase_prefixqueryを見てください。それはあなたのニーズにより適しているかもしれません。

于 2012-10-18T02:47:40.690 に答える
1

Analyze APIを使用すると、タイトルが用語にどのように分割されているかがわかります。

US-4321 は us および 4321 として索引付けされていると思います。「us 4321」を (QueryString または MatchQuery で) 検索すると、すべての us 用語とすべての 4321 用語が見つかります。

より多くの回答を得るには、クエリの詳細を記載するとよいでしょう。

タイトルに「-」が含まれていて、それがユース ケースで重要な場合は、別のアナライザーを使用する必要があります。ところで、ワイルドカードを使用すると、ngram または edgengram アナライザーを使用するよりも (パフォーマンス POV から) コストがかかります。

HTH デビッド

于 2012-10-18T03:01:34.973 に答える