回答:
term
クエリはそのまま単一の用語に一致します。値は分析されません。そのため、インデックス付けした内容に応じて、小文字にする必要はありません。
Bennett
インデックス時に提供され、値が分析されない場合、次のクエリは何も返しません。
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
クエリ対象のフィールドにアナライザーが定義されている場合、クエリは入力を分析し、次の基準に一致するドキュメントを見つけます。
たとえば、次のドキュメントにインデックスを付ける場合(standard
フィールドにアナライザーを使用foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
このmatch_phrase
クエリは、最初と2番目のドキュメントのみを返します。
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
既定では、一度に複数のテキストフィールドのテキストを含む_allフィールドでのクエリ検索。その上、解析され、いくつかの演算子(AND / OR ...)、ワイルドカードなどをサポートします(関連する構文を参照)。
match_phrase
クエリとして、入力は、クエリされたフィールドに設定されたアナライザーに従って分析されます。
とは異なり、match_phrase
ユーザーが入力の前後に引用符を使用していない限り、分析後に取得された用語は同じ順序である必要はありません。
たとえば、前と同じドキュメントを使用すると、このクエリはすべてのドキュメントを返します。
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
ただし、このクエリはクエリと同じ2つのドキュメントを返しmatch_phrase
ます。
{
"query": {
"query_string": {
"query": "\"Hello World\""
}
}
}
これらのクエリのさまざまなオプションについては、他にも言うべきことがたくさんあります。関連ドキュメントをご覧ください。
これが十分に明確であり、役立つことを願っています。
match
クエリは、フィールドが分析されている場合はアナライザーを使用するため、はい。デフォルトでは、少なくとも1つの用語(パラメータを参照operator
)を含むドキュメントが返され、順序は重要ではありません。
部分的な検索に関してそれらの間の違いを間違いなく探している人がいると思います ここにデフォルトの「標準アナライザー」での私の分析があります :-
データがあるとします:-
{"名前": "こんにちは"}
次に、ellを使用して部分検索を実行する場合はどうでしょうか?
用語クエリまたは一致クエリ
{"term":{"name": "*ell*" }
動作しません、注意してください。
{"term":{"name": "*zz* *ell*" }
動作しません、注意してください。
結論 -用語または一致は部分検索をまったく実行できません
ワイルドカードクエリ:-
{"wildcard":{"name": "*ell*" }
動作し、結果{"name": "Hello"}が得られます
{"wildcard":{"name": "*zz* *ell*" }
動作しません、注意してください。
結論 -ワイルドカードは1つのトークンのみで部分検索を実行できます
クエリ文字列 :-
{"query_string": {"default_field": "name","query": "*ell*"}
動作し、結果は{"name":“ Hello”}になります
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
動作し、結果は{"name":“ Hello”}になります。
結論 -query_stringは2つのトークンを指定して検索できます
->ここでトークンはellとzzです
wildcard is able to do partial search with one token only
:より正確には、wildcard
クエリはデフォルトでkeyword
、定義上は単一トークンであるフィールドでのみ機能します。これは、フィールドの内容が複数の単語であることとは無関係です。ワイルドカードクエリでは、「ozzy hello」が一致します。