私は、Elasticsearchでmatch_phrase_prefixクエリを使用すると、特にクエリが1つの単語に続いて1つの文字。Elasticsearchの一致フレーズプレフィックスがすべての単語に一致しない
http://localhost:9200/test/drinks/_mapping
リターン:
は、このインデックスマッピング(これは機密データを保護するために、不自然な例です)乗り
{
"test": {
"mappings": {
"drinks": {
"properties": {
"name": {
"type": "text"
}
}
}
}
}
}
そして他のレコードの数百万人の中にこれらは以下のとおりです。
{
"_index": "test",
"_type": "drinks",
"_id": "2",
"_score": 1,
"_source": {
"name": "Johnnie Walker Black Label"
}
},
{
"_index": "test",
"_type": "drinks",
"_id": "1",
"_score": 1,
"_source": {
"name": "Johnnie Walker Blue Label"
}
}
次のクエリは、1つの単語とそれに続く2文字の文字です:
POST http://localhost:9200/test/drinks/_search
{
"query": {
"match_phrase_prefix" : {
"name" : "Walker Bl"
}
}
}
戻り、この:
POST http://localhost:9200/test/drinks/_search
{
"query": {
"match_phrase_prefix" : {
"name" : "Walker B"
}
}
}
返さない結果:一つの単語と1つの文字で、このクエリ一方
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.5753642,
"hits": [
{
"_index": "test",
"_type": "drinks",
"_id": "2",
"_score": 0.5753642,
"_source": {
"name": "Johnnie Walker Black Label"
}
},
{
"_index": "test",
"_type": "drinks",
"_id": "1",
"_score": 0.5753642,
"_source": {
"name": "Johnnie Walker Blue Label"
}
}
]
}
}
。ここで何が起こっているのでしょうか?
1つの質問では、「クイック」と「ブラウン」が検索されます。その後、elasticsearchは、 "f"で始まり、 "quick"と "brown"の順で先行する50語(デフォルト)を探しますか?あるいは、「f」で始まる用語だけですか?そして、前のケースのいずれにおいても、少なくとも(この質問では)「b」(「青」と「黒」)で始まる用語が2つあるなら、結果を返さないのですが、私は最初の50語少なくともその2つまたは他のものが示されるべきである。または私はすべて間違っています。 – Jose
50語は、(ESがカスタム言語をサポートしているので)あなたのクラスタで使用されている言語に基づいた組み込み辞書からのもので、インデックスにある別のドキュメントのものではありません。これは、なぜそれがmatch_phrase_prefix querieのカスタムパラメータであり、単に "size"パラメータを使用するのとは異なるのかを説明します – Rlarroque
私の場合、フィールドにはマッピングの言語プロパティはありません。そしてすぐに私は新しい手紙を紹介し、結果はより正確に表示されます。私は '' type ":" phrase_prefix "というマルチクエリクエリを使用していますので、' max_expansions'パラメータは使用できません。 – Jose