Match query

提供されたテキスト、数値、日付、またはブール値に一致するドキュメントを返します。提供されたテキストは、一致する前に分析されます。

match クエリは、ファジーマッチングのオプションを含むフルテキスト検索を実行するための標準クエリです。

Example request

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": {
  5. "query": "this is a test"
  6. }
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: {
  6. query: 'this is a test'
  7. }
  8. }
  9. }
  10. }
  11. )
  12. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a test"
  7. }
  8. }
  9. }
  10. }`)),
  11. es.Search.WithPretty(),
  12. )
  13. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: {
  5. query: "this is a test",
  6. },
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a test"
  7. }
  8. }
  9. }
  10. }

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 のデフォルト値に対して相対的です。01.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 がすべてのトークンを削除する場合、ドキュメントが返されないかどうかを示します。正当な値は次のとおりです:
    • none (デフォルト)
    • analyzer がすべてのトークンを削除する場合、ドキュメントは返されません。
    • all
    • match_allクエリに似て、すべてのドキュメントが返されます。
      ゼロ用語クエリの例を参照してください。

Notes

Short request example

<field>query パラメータを組み合わせることで、マッチクエリの構文を簡素化できます。たとえば:

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": "this is a test"
  5. }
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: 'this is a test'
  6. }
  7. }
  8. }
  9. )
  10. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": "this is a test"
  6. }
  7. }
  8. }`)),
  9. es.Search.WithPretty(),
  10. )
  11. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: "this is a test",
  5. },
  6. },
  7. });
  8. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": "this is a test"
  6. }
  7. }
  8. }

How the match query works

match クエリは boolean 型です。これは、提供されたテキストが分析され、分析プロセスが提供されたテキストからブールクエリを構築することを意味します。operator パラメータは、ブール句を制御するために or または and に設定できます(デフォルトは or です)。一致するためのオプションの最小 should 句の数は、minimum_should_match パラメータを使用して設定できます。

operator パラメータを使用した例は次のとおりです:

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": {
  5. "query": "this is a test",
  6. "operator": "and"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: {
  6. query: 'this is a test',
  7. operator: 'and'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a test",
  7. "operator": "and"
  8. }
  9. }
  10. }
  11. }`)),
  12. es.Search.WithPretty(),
  13. )
  14. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: {
  5. query: "this is a test",
  6. operator: "and",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a test",
  7. "operator": "and"
  8. }
  9. }
  10. }
  11. }

analyzer は、テキストの分析プロセスを実行するアナライザーを制御するために設定できます。デフォルトはフィールドの明示的なマッピング定義、またはデフォルトの検索アナライザーです。

lenient パラメータは、データ型の不一致によって引き起こされる例外を無視するために true に設定できます。デフォルトは false です。

Fuzziness in the match query

fuzziness は、クエリされるフィールドのタイプに基づいて ファジーマッチング を許可します。許可される設定についてはFuzzinessを参照してください。

この場合、prefix_lengthmax_expansions を設定してファジー処理を制御できます。ファジーオプションが設定されている場合、クエリは top_terms_blended_freqs_${max_expansions}書き換えメソッドとして使用し、fuzzy_rewrite パラメータはクエリがどのように書き換えられるかを制御します。

ファジー転置(abba)はデフォルトで許可されていますが、fuzzy_transpositionsfalse に設定することで無効にできます。

ファジーマッチングは、同義語を持つ用語や、分析プロセスが同じ位置で複数のトークンを生成する場合には適用されません。内部的には、これらの用語は特別な同義語クエリに展開され、用語頻度をブレンドしますが、ファジー展開はサポートされていません。

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": {
  5. "query": "this is a testt",
  6. "fuzziness": "AUTO"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: {
  6. query: 'this is a testt',
  7. fuzziness: 'AUTO'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a testt",
  7. "fuzziness": "AUTO"
  8. }
  9. }
  10. }
  11. }`)),
  12. es.Search.WithPretty(),
  13. )
  14. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: {
  5. query: "this is a testt",
  6. fuzziness: "AUTO",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "this is a testt",
  7. "fuzziness": "AUTO"
  8. }
  9. }
  10. }
  11. }

Zero terms query

使用されるアナライザーが、stop フィルターのようにクエリ内のすべてのトークンを削除する場合、デフォルトの動作はドキュメントを全く一致させないことです。それを変更するために、zero_terms_query オプションを使用できます。これは none (デフォルト) と all を受け入れ、match_all クエリに対応します。

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": {
  5. "query": "to be or not to be",
  6. "operator": "and",
  7. "zero_terms_query": "all"
  8. }
  9. }
  10. },
  11. )
  12. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: {
  6. query: 'to be or not to be',
  7. operator: 'and',
  8. zero_terms_query: 'all'
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "to be or not to be",
  7. "operator": "and",
  8. "zero_terms_query": "all"
  9. }
  10. }
  11. }
  12. }`)),
  13. es.Search.WithPretty(),
  14. )
  15. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: {
  5. query: "to be or not to be",
  6. operator: "and",
  7. zero_terms_query: "all",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "to be or not to be",
  7. "operator": "and",
  8. "zero_terms_query": "all"
  9. }
  10. }
  11. }
  12. }

Synonyms

match クエリは、synonym_graph トークンフィルターを使用して多項同義語の展開をサポートします。このフィルターが使用されると、パーサーは各多項同義語のためにフレーズクエリを作成します。たとえば、次の同義語: "ny, new york" は次のようになります:

(ny OR ("new york"))

また、結合を使用して多項同義語を一致させることも可能です:

Php

  1. $params = [
  2. 'body' => [
  3. 'query' => [
  4. 'match' => [
  5. 'message' => [
  6. 'query' => 'ny city',
  7. 'auto_generate_synonyms_phrase_query' => false,
  8. ],
  9. ],
  10. ],
  11. ],
  12. ];
  13. $response = $client->search($params);

Python

  1. resp = client.search(
  2. query={
  3. "match": {
  4. "message": {
  5. "query": "ny city",
  6. "auto_generate_synonyms_phrase_query": False
  7. }
  8. }
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. match: {
  5. message: {
  6. query: 'ny city',
  7. auto_generate_synonyms_phrase_query: false
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithBody(strings.NewReader(`{
  3. "query": {
  4. "match": {
  5. "message": {
  6. "query": "ny city",
  7. "auto_generate_synonyms_phrase_query": false
  8. }
  9. }
  10. }
  11. }`)),
  12. es.Search.WithPretty(),
  13. )
  14. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. query: {
  3. match: {
  4. message: {
  5. query: "ny city",
  6. auto_generate_synonyms_phrase_query: false,
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "match" : {
  5. "message": {
  6. "query" : "ny city",
  7. "auto_generate_synonyms_phrase_query" : false
  8. }
  9. }
  10. }
  11. }

上記の例は、ブールクエリを作成します:

(ny OR (new AND york)) city

ny という用語または new AND york という結合を持つドキュメントに一致します。デフォルトで、auto_generate_synonyms_phrase_query パラメータは true に設定されています。