用語セットクエリ

指定されたフィールドに最小限の正確な用語を含む文書を返します。

  1. - フィールド`````programming_languages`````には、`````c++``````````java`````、または`````php`````のような既知のプログラミング言語のリストが含まれています。`````terms_set`````クエリを使用して、これらの言語のうち少なくとも2つに一致する文書を返すことができます。
  2. - フィールド`````permissions`````には、アプリケーションの可能なユーザー権限のリストが含まれています。`````terms_set`````クエリを使用して、これらの権限のサブセットに一致する文書を返すことができます。
  3. ## 例のリクエスト
  4. ### インデックス設定
  5. ほとんどの場合、`````terms_set`````クエリを使用するために、インデックスに[numeric](/read/elasticsearch-8-15/8d530a3459b86d80.md)フィールドマッピングを含める必要があります。この数値フィールドには、文書を返すために必要な一致する用語の数が含まれています。
  6. `````terms_set`````クエリのためにインデックスを設定する方法を確認するには、次の例を試してください。
  7. - 1*.* 次のフィールドマッピングを持つインデックス`````job-candidates`````を作成します:
  8. - `````name`````、[`````keyword`````](/read/elasticsearch-8-15/491649a654160c3a.md)フィールド。このフィールドには、求職者の名前が含まれています。
  9. - `````programming_languages`````、[`````keyword`````](/read/elasticsearch-8-15/491649a654160c3a.md)フィールド。このフィールドには、求職者が知っているプログラミング言語が含まれています。
  10. - `````required_matches`````、[numeric](/read/elasticsearch-8-15/8d530a3459b86d80.md) `````long`````フィールド。このフィールドには、文書を返すために必要な一致する用語の数が含まれています。
  11. #### Python
  12. ``````python
  13. resp = client.indices.create(
  14. index="job-candidates",
  15. mappings={
  16. "properties": {
  17. "name": {
  18. "type": "keyword"
  19. },
  20. "programming_languages": {
  21. "type": "keyword"
  22. },
  23. "required_matches": {
  24. "type": "long"
  25. }
  26. }
  27. },
  28. )
  29. print(resp)
  30. `

Ruby

  1. response = client.indices.create(
  2. index: 'job-candidates',
  3. body: {
  4. mappings: {
  5. properties: {
  6. name: {
  7. type: 'keyword'
  8. },
  9. programming_languages: {
  10. type: 'keyword'
  11. },
  12. required_matches: {
  13. type: 'long'
  14. }
  15. }
  16. }
  17. }
  18. )
  19. puts response

Js

  1. const response = await client.indices.create({
  2. index: "job-candidates",
  3. mappings: {
  4. properties: {
  5. name: {
  6. type: "keyword",
  7. },
  8. programming_languages: {
  9. type: "keyword",
  10. },
  11. required_matches: {
  12. type: "long",
  13. },
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. PUT /job-candidates
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name": {
  6. "type": "keyword"
  7. },
  8. "programming_languages": {
  9. "type": "keyword"
  10. },
  11. "required_matches": {
  12. "type": "long"
  13. }
  14. }
  15. }
  16. }
  • 2. IDが1の文書をインデックスし、次の値を設定します:
    • Jane Smithnameフィールドに。
    • ["c++", "java"]programming_languagesフィールドに。
    • 2required_matchesフィールドに。
      ?refreshパラメータを含めて、文書がすぐに検索可能になるようにします。

Python

  1. resp = client.index(
  2. index="job-candidates",
  3. id="1",
  4. refresh=True,
  5. document={
  6. "name": "Jane Smith",
  7. "programming_languages": [
  8. "c++",
  9. "java"
  10. ],
  11. "required_matches": 2
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.index(
  2. index: 'job-candidates',
  3. id: 1,
  4. refresh: true,
  5. body: {
  6. name: 'Jane Smith',
  7. programming_languages: [
  8. 'c++',
  9. 'java'
  10. ],
  11. required_matches: 2
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.index({
  2. index: "job-candidates",
  3. id: 1,
  4. refresh: "true",
  5. document: {
  6. name: "Jane Smith",
  7. programming_languages: ["c++", "java"],
  8. required_matches: 2,
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT /job-candidates/_doc/1?refresh
  2. {
  3. "name": "Jane Smith",
  4. "programming_languages": [ "c++", "java" ],
  5. "required_matches": 2
  6. }
  • 3. IDが2の別の文書をインデックスし、次の値を設定します:
    • Jason Responsenameフィールドに。
    • ["java", "php"]programming_languagesフィールドに。
    • 2required_matchesフィールドに。

Python

  1. resp = client.index(
  2. index="job-candidates",
  3. id="2",
  4. refresh=True,
  5. document={
  6. "name": "Jason Response",
  7. "programming_languages": [
  8. "java",
  9. "php"
  10. ],
  11. "required_matches": 2
  12. },
  13. )
  14. print(resp)

Ruby

  1. response = client.index(
  2. index: 'job-candidates',
  3. id: 2,
  4. refresh: true,
  5. body: {
  6. name: 'Jason Response',
  7. programming_languages: [
  8. 'java',
  9. 'php'
  10. ],
  11. required_matches: 2
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.index({
  2. index: "job-candidates",
  3. id: 2,
  4. refresh: "true",
  5. document: {
  6. name: "Jason Response",
  7. programming_languages: ["java", "php"],
  8. required_matches: 2,
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT /job-candidates/_doc/2?refresh
  2. {
  3. "name": "Jason Response",
  4. "programming_languages": [ "java", "php" ],
  5. "required_matches": 2
  6. }
  1. ### 例のクエリ
  2. 次の検索は、`````programming_languages`````フィールドに以下の用語のうち少なくとも2つが含まれる文書を返します:
  3. - `````c++
  • java
  • php
  1. #### Python
  2. ``````python
  3. resp = client.search(
  4. index="job-candidates",
  5. query={
  6. "terms_set": {
  7. "programming_languages": {
  8. "terms": [
  9. "c++",
  10. "java",
  11. "php"
  12. ],
  13. "minimum_should_match_field": "required_matches"
  14. }
  15. }
  16. },
  17. )
  18. print(resp)
  19. `

Ruby

  1. response = client.search(
  2. index: 'job-candidates',
  3. body: {
  4. query: {
  5. terms_set: {
  6. programming_languages: {
  7. terms: [
  8. 'c++',
  9. 'java',
  10. 'php'
  11. ],
  12. minimum_should_match_field: 'required_matches'
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.search({
  2. index: "job-candidates",
  3. query: {
  4. terms_set: {
  5. programming_languages: {
  6. terms: ["c++", "java", "php"],
  7. minimum_should_match_field: "required_matches",
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);

コンソール

  1. GET /job-candidates/_search
  2. {
  3. "query": {
  4. "terms_set": {
  5. "programming_languages": {
  6. "terms": [ "c++", "java", "php" ],
  7. "minimum_should_match_field": "required_matches"
  8. }
  9. }
  10. }
  11. }

terms_setのトップレベルパラメータ

  • <field>
  • (必須、オブジェクト) 検索したいフィールド。

のパラメータ

  • terms
  • (必須、文字列の配列) 提供された<field>で見つけたい用語の配列。文書を返すためには、必要な数の用語がフィールド値と正確に一致する必要があります。空白や大文字小文字も含まれます。
    必要な一致する用語の数は、minimum_should_match_fieldまたはminimum_should_match_scriptパラメータで定義されます。
  • minimum_should_match_field
  • (オプション、文字列) 文書を返すために必要な一致する用語の数を含むnumericフィールド。
  • minimum_should_match_script
  • (オプション、文字列) 文書を返すために必要な一致する用語の数を含むカスタムスクリプト。
    パラメータと有効な値については、スクリプティングを参照してください。
    minimum_should_match_scriptパラメータを使用した例のクエリについては、minimum_should_match_scriptパラメータの使用方法を参照してください。

ノート

minimum_should_match_scriptパラメータの使用方法

  1. #### minimum_should_match_scriptを使用した例のクエリ
  2. 次の検索は、`````programming_languages`````フィールドに以下の用語のうち少なくとも2つが含まれる文書を返します:
  3. - `````c++
  • java
  • php

このクエリのsourceパラメータは次のことを示します:

  • 一致する必要がある用語の数はparams.num_termstermsフィールドに提供された用語の数を超えることはできません。
  • 一致する必要がある用語の数は2required_matchesフィールドの値です。

Python

  1. resp = client.search(
  2. index="job-candidates",
  3. query={
  4. "terms_set": {
  5. "programming_languages": {
  6. "terms": [
  7. "c++",
  8. "java",
  9. "php"
  10. ],
  11. "minimum_should_match_script": {
  12. "source": "Math.min(params.num_terms, doc['required_matches'].value)"
  13. },
  14. "boost": 1
  15. }
  16. }
  17. },
  18. )
  19. print(resp)

Ruby

  1. response = client.search(
  2. index: 'job-candidates',
  3. body: {
  4. query: {
  5. terms_set: {
  6. programming_languages: {
  7. terms: [
  8. 'c++',
  9. 'java',
  10. 'php'
  11. ],
  12. minimum_should_match_script: {
  13. source: "Math.min(params.num_terms, doc['required_matches'].value)"
  14. },
  15. boost: 1
  16. }
  17. }
  18. }
  19. }
  20. )
  21. puts response

Js

  1. const response = await client.search({
  2. index: "job-candidates",
  3. query: {
  4. terms_set: {
  5. programming_languages: {
  6. terms: ["c++", "java", "php"],
  7. minimum_should_match_script: {
  8. source: "Math.min(params.num_terms, doc['required_matches'].value)",
  9. },
  10. boost: 1,
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);

コンソール

  1. GET /job-candidates/_search
  2. {
  3. "query": {
  4. "terms_set": {
  5. "programming_languages": {
  6. "terms": [ "c++", "java", "php" ],
  7. "minimum_should_match_script": {
  8. "source": "Math.min(params.num_terms, doc['required_matches'].value)"
  9. },
  10. "boost": 1.0
  11. }
  12. }
  13. }
  14. }