Match query
提供されたテキスト、数値、日付、またはブール値に一致するドキュメントを返します。提供されたテキストは、一致する前に分析されます。
match
クエリは、ファジーマッチングのオプションを含むフルテキスト検索を実行するための標準クエリです。
Example request
Python
resp = client.search(
query={
"match": {
"message": {
"query": "this is a test"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a test'
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: {
query: "this is a test",
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test"
}
}
}
}
Top-level parameters for match
<field>
- (必須、オブジェクト) 検索したいフィールド。
Parameters for
query
- (必須) 提供された
<field>
で見つけたいテキスト、数値、ブール値、または日付。match
クエリは、検索を実行する前に提供されたテキストを分析します。これは、match
クエリが、正確な用語ではなく、分析されたトークンのためにtext
フィールドを検索できることを意味します。 analyzer
- (オプション、文字列)
query
値のテキストをトークンに変換するために使用されるアナライザー。<field>
にマッピングされたインデックス時アナライザーがデフォルトです。アナライザーがマッピングされていない場合、インデックスのデフォルトアナライザーが使用されます。 auto_generate_synonyms_phrase_query
- (オプション、ブール)
true
の場合、マッチフレーズクエリは自動的に多項同義語のために作成されます。デフォルトはtrue
です。
マッチクエリでの同義語の使用の例を参照してください。 boost
- (オプション、浮動小数点) クエリの関連スコアを減少または増加させるために使用される浮動小数点数。デフォルトは
1.0
です。ブースト値は1.0
のデフォルト値に対して相対的です。0
と1.0
の間のブースト値は関連スコアを減少させます。1.0
より大きい値は関連スコアを増加させます。 fuzziness
- (オプション、文字列) 一致のために許可される最大編集距離。正当な値と詳細についてはFuzzinessを参照してください。マッチクエリでのFuzzinessの例を参照してください。
max_expansions
- (オプション、整数) クエリが展開する最大用語数。デフォルトは
50
です。 prefix_length
- (オプション、整数) ファジーマッチングのために変更されない最初の文字数。デフォルトは
0
です。 fuzzy_transpositions
- (オプション、ブール)
true
の場合、ファジーマッチングのための編集には隣接する2文字の転置(ab → ba)が含まれます。デフォルトはtrue
です。 fuzzy_rewrite
- (オプション、文字列) クエリを書き換えるために使用されるメソッド。
rewrite
パラメータの正当な値と詳細を参照してください。fuzziness
パラメータが0
でない場合、match
クエリはデフォルトでfuzzy_rewrite
メソッドのtop_terms_blended_freqs_${max_expansions}
を使用します。 lenient
- (オプション、ブール)
true
の場合、形式に基づくエラー、たとえば、数値フィールドにテキストquery
値を提供することは無視されます。デフォルトはfalse
です。 operator
- (オプション、文字列)
query
値のテキストを解釈するために使用されるブール論理。正当な値は次のとおりです:OR
(デフォルト)- たとえば、
query
値がcapital of Hungary
の場合、capital OR of OR Hungary
として解釈されます。 AND
- たとえば、
query
値がcapital of Hungary
の場合、capital AND of AND Hungary
として解釈されます。
minimum_should_match
- (オプション、文字列) ドキュメントが返されるために一致しなければならない最小の条項数。
minimum_should_match
パラメータの正当な値と詳細を参照してください。 zero_terms_query
- (オプション、文字列)
analyzer
がすべてのトークンを削除する場合、ドキュメントが返されないかどうかを示します。正当な値は次のとおりです:
Notes
Short request example
<field>
と query
パラメータを組み合わせることで、マッチクエリの構文を簡素化できます。たとえば:
Python
resp = client.search(
query={
"match": {
"message": "this is a test"
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: 'this is a test'
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": "this is a test"
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: "this is a test",
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match": {
"message": "this is a test"
}
}
}
How the match query works
match
クエリは boolean
型です。これは、提供されたテキストが分析され、分析プロセスが提供されたテキストからブールクエリを構築することを意味します。operator
パラメータは、ブール句を制御するために or
または and
に設定できます(デフォルトは or
です)。一致するためのオプションの最小 should
句の数は、minimum_should_match
パラメータを使用して設定できます。
operator
パラメータを使用した例は次のとおりです:
Python
resp = client.search(
query={
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a test',
operator: 'and'
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: {
query: "this is a test",
operator: "and",
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
}
}
analyzer
は、テキストの分析プロセスを実行するアナライザーを制御するために設定できます。デフォルトはフィールドの明示的なマッピング定義、またはデフォルトの検索アナライザーです。
lenient
パラメータは、データ型の不一致によって引き起こされる例外を無視するために true
に設定できます。デフォルトは false
です。
Fuzziness in the match query
fuzziness
は、クエリされるフィールドのタイプに基づいて ファジーマッチング を許可します。許可される設定についてはFuzzinessを参照してください。
この場合、prefix_length
と max_expansions
を設定してファジー処理を制御できます。ファジーオプションが設定されている場合、クエリは top_terms_blended_freqs_${max_expansions}
を書き換えメソッドとして使用し、fuzzy_rewrite
パラメータはクエリがどのように書き換えられるかを制御します。
ファジー転置(ab
→ ba
)はデフォルトで許可されていますが、fuzzy_transpositions
を false
に設定することで無効にできます。
ファジーマッチングは、同義語を持つ用語や、分析プロセスが同じ位置で複数のトークンを生成する場合には適用されません。内部的には、これらの用語は特別な同義語クエリに展開され、用語頻度をブレンドしますが、ファジー展開はサポートされていません。
Python
resp = client.search(
query={
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: {
query: 'this is a testt',
fuzziness: 'AUTO'
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: {
query: "this is a testt",
fuzziness: "AUTO",
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a testt",
"fuzziness": "AUTO"
}
}
}
}
Zero terms query
使用されるアナライザーが、stop
フィルターのようにクエリ内のすべてのトークンを削除する場合、デフォルトの動作はドキュメントを全く一致させないことです。それを変更するために、zero_terms_query
オプションを使用できます。これは none
(デフォルト) と all
を受け入れ、match_all
クエリに対応します。
Python
resp = client.search(
query={
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: {
query: 'to be or not to be',
operator: 'and',
zero_terms_query: 'all'
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: {
query: "to be or not to be",
operator: "and",
zero_terms_query: "all",
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match": {
"message": {
"query": "to be or not to be",
"operator": "and",
"zero_terms_query": "all"
}
}
}
}
Synonyms
match
クエリは、synonym_graph トークンフィルターを使用して多項同義語の展開をサポートします。このフィルターが使用されると、パーサーは各多項同義語のためにフレーズクエリを作成します。たとえば、次の同義語: "ny, new york"
は次のようになります:
(ny OR ("new york"))
また、結合を使用して多項同義語を一致させることも可能です:
Php
$params = [
'body' => [
'query' => [
'match' => [
'message' => [
'query' => 'ny city',
'auto_generate_synonyms_phrase_query' => false,
],
],
],
],
];
$response = $client->search($params);
Python
resp = client.search(
query={
"match": {
"message": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": False
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
match: {
message: {
query: 'ny city',
auto_generate_synonyms_phrase_query: false
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"message": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": false
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
match: {
message: {
query: "ny city",
auto_generate_synonyms_phrase_query: false,
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"match" : {
"message": {
"query" : "ny city",
"auto_generate_synonyms_phrase_query" : false
}
}
}
}
上記の例は、ブールクエリを作成します:
(ny OR (new AND york)) city
ny
という用語または new AND york
という結合を持つドキュメントに一致します。デフォルトで、auto_generate_synonyms_phrase_query
パラメータは true
に設定されています。