用語セットクエリ
指定されたフィールドに最小限の正確な用語を含む文書を返します。
- フィールド`````programming_languages`````には、`````c++`````、`````java`````、または`````php`````のような既知のプログラミング言語のリストが含まれています。`````terms_set`````クエリを使用して、これらの言語のうち少なくとも2つに一致する文書を返すことができます。
- フィールド`````permissions`````には、アプリケーションの可能なユーザー権限のリストが含まれています。`````terms_set`````クエリを使用して、これらの権限のサブセットに一致する文書を返すことができます。
## 例のリクエスト
### インデックス設定
ほとんどの場合、`````terms_set`````クエリを使用するために、インデックスに[numeric](/read/elasticsearch-8-15/8d530a3459b86d80.md)フィールドマッピングを含める必要があります。この数値フィールドには、文書を返すために必要な一致する用語の数が含まれています。
`````terms_set`````クエリのためにインデックスを設定する方法を確認するには、次の例を試してください。
- 1*.* 次のフィールドマッピングを持つインデックス`````job-candidates`````を作成します:
- `````name`````、[`````keyword`````](/read/elasticsearch-8-15/491649a654160c3a.md)フィールド。このフィールドには、求職者の名前が含まれています。
- `````programming_languages`````、[`````keyword`````](/read/elasticsearch-8-15/491649a654160c3a.md)フィールド。このフィールドには、求職者が知っているプログラミング言語が含まれています。
- `````required_matches`````、[numeric](/read/elasticsearch-8-15/8d530a3459b86d80.md) `````long`````フィールド。このフィールドには、文書を返すために必要な一致する用語の数が含まれています。
#### Python
``````python
resp = client.indices.create(
index="job-candidates",
mappings={
"properties": {
"name": {
"type": "keyword"
},
"programming_languages": {
"type": "keyword"
},
"required_matches": {
"type": "long"
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'job-candidates',
body: {
mappings: {
properties: {
name: {
type: 'keyword'
},
programming_languages: {
type: 'keyword'
},
required_matches: {
type: 'long'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "job-candidates",
mappings: {
properties: {
name: {
type: "keyword",
},
programming_languages: {
type: "keyword",
},
required_matches: {
type: "long",
},
},
},
});
console.log(response);
コンソール
PUT /job-candidates
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"programming_languages": {
"type": "keyword"
},
"required_matches": {
"type": "long"
}
}
}
}
- 2. IDが
1
の文書をインデックスし、次の値を設定します:Jane Smith
をname
フィールドに。["c++", "java"]
をprogramming_languages
フィールドに。2
をrequired_matches
フィールドに。?refresh
パラメータを含めて、文書がすぐに検索可能になるようにします。
Python
resp = client.index(
index="job-candidates",
id="1",
refresh=True,
document={
"name": "Jane Smith",
"programming_languages": [
"c++",
"java"
],
"required_matches": 2
},
)
print(resp)
Ruby
response = client.index(
index: 'job-candidates',
id: 1,
refresh: true,
body: {
name: 'Jane Smith',
programming_languages: [
'c++',
'java'
],
required_matches: 2
}
)
puts response
Js
const response = await client.index({
index: "job-candidates",
id: 1,
refresh: "true",
document: {
name: "Jane Smith",
programming_languages: ["c++", "java"],
required_matches: 2,
},
});
console.log(response);
コンソール
PUT /job-candidates/_doc/1?refresh
{
"name": "Jane Smith",
"programming_languages": [ "c++", "java" ],
"required_matches": 2
}
- 3. IDが
2
の別の文書をインデックスし、次の値を設定します:Jason Response
をname
フィールドに。["java", "php"]
をprogramming_languages
フィールドに。2
をrequired_matches
フィールドに。
Python
resp = client.index(
index="job-candidates",
id="2",
refresh=True,
document={
"name": "Jason Response",
"programming_languages": [
"java",
"php"
],
"required_matches": 2
},
)
print(resp)
Ruby
response = client.index(
index: 'job-candidates',
id: 2,
refresh: true,
body: {
name: 'Jason Response',
programming_languages: [
'java',
'php'
],
required_matches: 2
}
)
puts response
Js
const response = await client.index({
index: "job-candidates",
id: 2,
refresh: "true",
document: {
name: "Jason Response",
programming_languages: ["java", "php"],
required_matches: 2,
},
});
console.log(response);
コンソール
PUT /job-candidates/_doc/2?refresh
{
"name": "Jason Response",
"programming_languages": [ "java", "php" ],
"required_matches": 2
}
### 例のクエリ
次の検索は、`````programming_languages`````フィールドに以下の用語のうち少なくとも2つが含まれる文書を返します:
- `````c++
java
php
#### Python
``````python
resp = client.search(
index="job-candidates",
query={
"terms_set": {
"programming_languages": {
"terms": [
"c++",
"java",
"php"
],
"minimum_should_match_field": "required_matches"
}
}
},
)
print(resp)
`
Ruby
response = client.search(
index: 'job-candidates',
body: {
query: {
terms_set: {
programming_languages: {
terms: [
'c++',
'java',
'php'
],
minimum_should_match_field: 'required_matches'
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "job-candidates",
query: {
terms_set: {
programming_languages: {
terms: ["c++", "java", "php"],
minimum_should_match_field: "required_matches",
},
},
},
});
console.log(response);
コンソール
GET /job-candidates/_search
{
"query": {
"terms_set": {
"programming_languages": {
"terms": [ "c++", "java", "php" ],
"minimum_should_match_field": "required_matches"
}
}
}
}
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パラメータの使用方法
#### minimum_should_match_scriptを使用した例のクエリ
次の検索は、`````programming_languages`````フィールドに以下の用語のうち少なくとも2つが含まれる文書を返します:
- `````c++
java
php
このクエリのsource
パラメータは次のことを示します:
- 一致する必要がある用語の数は
params.num_terms
、terms
フィールドに提供された用語の数を超えることはできません。 - 一致する必要がある用語の数は
2
、required_matches
フィールドの値です。
Python
resp = client.search(
index="job-candidates",
query={
"terms_set": {
"programming_languages": {
"terms": [
"c++",
"java",
"php"
],
"minimum_should_match_script": {
"source": "Math.min(params.num_terms, doc['required_matches'].value)"
},
"boost": 1
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'job-candidates',
body: {
query: {
terms_set: {
programming_languages: {
terms: [
'c++',
'java',
'php'
],
minimum_should_match_script: {
source: "Math.min(params.num_terms, doc['required_matches'].value)"
},
boost: 1
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "job-candidates",
query: {
terms_set: {
programming_languages: {
terms: ["c++", "java", "php"],
minimum_should_match_script: {
source: "Math.min(params.num_terms, doc['required_matches'].value)",
},
boost: 1,
},
},
},
});
console.log(response);
コンソール
GET /job-candidates/_search
{
"query": {
"terms_set": {
"programming_languages": {
"terms": [ "c++", "java", "php" ],
"minimum_should_match_script": {
"source": "Math.min(params.num_terms, doc['required_matches'].value)"
},
"boost": 1.0
}
}
}
}