Term query
指定されたフィールドに正確な用語を含むドキュメントを返します。
[`````term`````](/read/elasticsearch-8-15/a85566ae42da41c4.md)フィールドに対して`````term`````クエリを使用しないでください。
デフォルトでは、Elasticsearchは[`````text`````](/read/elasticsearch-8-15/0973989adfca645e.md)の一部として`````text`````フィールドの値を変更します。これにより、`````text`````フィールドの値の正確な一致を見つけることが難しくなる場合があります。
`````text`````フィールドの値を検索するには、代わりに[`````match`````](/read/elasticsearch-8-15/6701b8226a9afe3f.md)クエリを使用してください。
## Example request
#### Python
``````python
resp = client.search(
query={
"term": {
"user.id": {
"value": "kimchy",
"boost": 1
}
}
},
)
print(resp)
`
Ruby
response = client.search(
body: {
query: {
term: {
'user.id' => {
value: 'kimchy',
boost: 1
}
}
}
}
)
puts response
Js
const response = await client.search({
query: {
term: {
"user.id": {
value: "kimchy",
boost: 1,
},
},
},
});
console.log(response);
Console
GET /_search
{
"query": {
"term": {
"user.id": {
"value": "kimchy",
"boost": 1.0
}
}
}
}
Top-level parameters for term
<field>
- (必須、オブジェクト) 検索したいフィールド。
Parameters for
value
- (必須、文字列) 提供された
<field>
で見つけたい用語。ドキュメントを返すには、用語がフィールド値と正確に一致する必要があります(空白や大文字小文字を含む)。 boost
- (オプション、浮動小数点数) クエリの関連スコアを減少または増加させるために使用される浮動小数点数。デフォルトは
1.0
です。boost
パラメータを使用して、2つ以上のクエリを含む検索の関連スコアを調整できます。
ブースト値は1.0
のデフォルト値に対して相対的です。0
と1.0
の間のブースト値は関連スコアを減少させます。1.0
より大きい値は関連スコアを増加させます。 case_insensitive
[7.10.0] 7.10.0で追加されました。- (オプション、ブール値) trueに設定すると、インデックスされたフィールド値との間でASCIIの大文字小文字を区別しない一致を許可します。デフォルトはfalseで、これは一致の大文字小文字の感度が基になるフィールドのマッピングに依存することを意味します。
Notes
Avoid using the term query for text fields
デフォルトでは、Elasticsearchは分析中にtext
フィールドの値を変更します。たとえば、デフォルトの標準アナライザーは、text
フィールドの値を次のように変更します:
- ほとんどの句読点を削除
- 残りの内容を個々の単語(トークンと呼ばれる)に分割
- トークンを小文字に変換
`````term`````クエリは検索用語を**分析しません**。`````term`````クエリは、提供された**正確な**用語のみを検索します。これは、`````term`````クエリが`````text`````フィールドを検索する際に、結果が悪いか、結果がない可能性があることを意味します。
検索結果の違いを確認するには、次の例を試してください。
- 1*.* `````full_text`````という`````text`````フィールドを持つインデックスを作成します。
#### Python
``````python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"full_text": {
"type": "text"
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
full_text: {
type: 'text'
}
}
}
}
)
puts response
Go
res, err := es.Indices.Create(
"my-index-000001",
es.Indices.Create.WithBody(strings.NewReader(`{
"mappings": {
"properties": {
"full_text": {
"type": "text"
}
}
}
}`)),
)
fmt.Println(res, err)
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
full_text: {
type: "text",
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"full_text": { "type": "text" }
}
}
}
- 2.
full_text
フィールドにQuick Brown Foxes!
の値を持つドキュメントをインデックスします。
Python
resp = client.index(
index="my-index-000001",
id="1",
document={
"full_text": "Quick Brown Foxes!"
},
)
print(resp)
Ruby
response = client.index(
index: 'my-index-000001',
id: 1,
body: {
full_text: 'Quick Brown Foxes!'
}
)
puts response
Go
res, err := es.Index(
"my-index-000001",
strings.NewReader(`{
"full_text": "Quick Brown Foxes!"
}`),
es.Index.WithDocumentID("1"),
es.Index.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.index({
index: "my-index-000001",
id: 1,
document: {
full_text: "Quick Brown Foxes!",
},
});
console.log(response);
Console
PUT my-index-000001/_doc/1
{
"full_text": "Quick Brown Foxes!"
}
text
フィールドはfull_text
フィールドであるため、Elasticsearchは分析中にQuick Brown Foxes!
を[quick, brown, fox]
に変更します。
- 3.
full_text
フィールドでQuick Brown Foxes!
を検索するためにterm
クエリを使用します。応答がより読みやすくなるようにpretty
パラメータを含めてください。
Python
resp = client.search(
index="my-index-000001",
pretty=True,
query={
"term": {
"full_text": "Quick Brown Foxes!"
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
pretty: true,
body: {
query: {
term: {
full_text: 'Quick Brown Foxes!'
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithIndex("my-index-000001"),
es.Search.WithBody(strings.NewReader(`{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
index: "my-index-000001",
pretty: "true",
query: {
term: {
full_text: "Quick Brown Foxes!",
},
},
});
console.log(response);
Console
GET my-index-000001/_search?pretty
{
"query": {
"term": {
"full_text": "Quick Brown Foxes!"
}
}
}
Quick Brown
Foxes!
のフィールドにはもはや正確な用語Quick Brown
Foxes!
が含まれていないため、term
クエリ検索は結果を返しません。
- 4.
full_text
フィールドでQuick Brown Foxes!
を検索するためにmatch
クエリを使用します。
Python
resp = client.search(
index="my-index-000001",
pretty=True,
query={
"match": {
"full_text": "Quick Brown Foxes!"
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
pretty: true,
body: {
query: {
match: {
full_text: 'Quick Brown Foxes!'
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithIndex("my-index-000001"),
es.Search.WithBody(strings.NewReader(`{
"query": {
"match": {
"full_text": "Quick Brown Foxes!"
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
index: "my-index-000001",
pretty: "true",
query: {
match: {
full_text: "Quick Brown Foxes!",
},
},
});
console.log(response);
Console
GET my-index-000001/_search?pretty
{
"query": {
"match": {
"full_text": "Quick Brown Foxes!"
}
}
}
term
クエリとは異なり、match
クエリは検索を実行する前に提供された検索用語Quick Brown Foxes!
を分析します。match
クエリは、その後、quick
、brown
、またはfox
トークンをfull_text
フィールドに含むドキュメントを返します。
以下は、結果にインデックスされたドキュメントを含むmatch
クエリ検索の応答です。
Console-Result
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.8630463,
"hits" : [
{
"_index" : "my-index-000001",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"full_text" : "Quick Brown Foxes!"
}
}
]
}
}