フレーズプレフィックスクエリ
提供されたテキストの単語を、提供された同じ順序で含む文書を返します。提供されたテキストの最後の用語はプレフィックスとして扱われ、その用語で始まる任意の単語と一致します。
例リクエスト
次の検索は、quick brown f
フィールドにmessage
で始まるフレーズを含む文書を返します。
この検索は、message
の値がquick brown fox
またはtwo quick
brown ferrets
である場合に一致しますが、the fox is quick and brown
には一致しません。
Python
resp = client.search(
query={
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match_phrase_prefix: {
message: {
query: 'quick brown f'
}
}
}
}
)
puts response
Js
const response = await client.search({
query: {
match_phrase_prefix: {
message: {
query: "quick brown f",
},
},
},
});
console.log(response);
コンソール
GET /_search
{
"query": {
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
}
}
match_phrase_prefixのトップレベルパラメータ
<field>
- (必須、オブジェクト) 検索したいフィールド。
のパラメータ
query
- (必須、文字列) 提供された
<field>
で見つけたいテキスト。match_phrase_prefix
クエリは、検索を実行する前に提供されたテキストをトークンに分析します。このテキストの最後の用語はプレフィックスとして扱われ、その用語で始まる任意の単語と一致します。 analyzer
- (オプション、文字列)
query
値のテキストをトークンに変換するために使用されるアナライザー。<field>
にマッピングされたインデックス時アナライザーがデフォルトです。アナライザーがマッピングされていない場合、インデックスのデフォルトアナライザーが使用されます。 max_expansions
- (オプション、整数)
query
値の最後に提供された用語が展開される最大用語数。デフォルトは50
です。 slop
- (オプション、整数) 一致するトークン間で許可される最大位置数。デフォルトは
0
です。転置された用語は2
のスロップを持ちます。 zero_terms_query
- (オプション、文字列)
analyzer
がすべてのトークンを削除する場合に文書が返されないかどうかを示します。これは、stop
フィルターを使用する場合などです。有効な値は次のとおりです:none
(デフォルト)analyzer
がすべてのトークンを削除する場合、文書は返されません。all
match_all
クエリに似て、すべての文書を返します。
ノート
検索オートコンプリートのためのフレーズプレフィックスクエリの使用
設定は簡単ですが、match_phrase_prefix
クエリを検索オートコンプリートに使用すると、時々混乱を招く結果が得られることがあります。
たとえば、クエリ文字列quick brown f
を考えてみてください。このクエリは、quick
とbrown
からフレーズクエリを作成することによって機能します(つまり、quick
という用語が存在し、brown
という用語の後に続く必要があります)。次に、ソートされた用語辞書を見て、f
で始まる最初の50の用語を見つけ、これらの用語をフレーズクエリに追加します。
問題は、最初の50の用語にfox
という用語が含まれていない可能性があるため、フレーズquick brown fox
が見つからないことです。通常、これは問題ではなく、ユーザーは探している単語が表示されるまで、さらに文字を入力し続けます。
検索中にタイプするのためのより良い解決策については、補完サジェスターとsearch_as_you_type
フィールドタイプを参照してください。