Term query

指定されたフィールドに正確な用語を含むドキュメントを返します。

  1. [`````term`````](/read/elasticsearch-8-15/a85566ae42da41c4.md)フィールドに対して`````term`````クエリを使用しないでください。
  2. デフォルトでは、Elasticsearchは[`````text`````](/read/elasticsearch-8-15/0973989adfca645e.md)の一部として`````text`````フィールドの値を変更します。これにより、`````text`````フィールドの値の正確な一致を見つけることが難しくなる場合があります。
  3. `````text`````フィールドの値を検索するには、代わりに[`````match`````](/read/elasticsearch-8-15/6701b8226a9afe3f.md)クエリを使用してください。
  4. ## Example request
  5. #### Python
  6. ``````python
  7. resp = client.search(
  8. query={
  9. "term": {
  10. "user.id": {
  11. "value": "kimchy",
  12. "boost": 1
  13. }
  14. }
  15. },
  16. )
  17. print(resp)
  18. `

Ruby

  1. response = client.search(
  2. body: {
  3. query: {
  4. term: {
  5. 'user.id' => {
  6. value: 'kimchy',
  7. boost: 1
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.search({
  2. query: {
  3. term: {
  4. "user.id": {
  5. value: "kimchy",
  6. boost: 1,
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

Console

  1. GET /_search
  2. {
  3. "query": {
  4. "term": {
  5. "user.id": {
  6. "value": "kimchy",
  7. "boost": 1.0
  8. }
  9. }
  10. }
  11. }

Top-level parameters for term

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

Parameters for

  • value
  • (必須、文字列) 提供された<field>で見つけたい用語。ドキュメントを返すには、用語がフィールド値と正確に一致する必要があります(空白や大文字小文字を含む)。
  • boost
  • (オプション、浮動小数点数) クエリの関連スコアを減少または増加させるために使用される浮動小数点数。デフォルトは1.0です。
    boostパラメータを使用して、2つ以上のクエリを含む検索の関連スコアを調整できます。
    ブースト値は1.0のデフォルト値に対して相対的です。01.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フィールドの値を次のように変更します:

  • ほとんどの句読点を削除
  • 残りの内容を個々の単語(トークンと呼ばれる)に分割
  • トークンを小文字に変換
  1. `````term`````クエリは検索用語を**分析しません**。`````term`````クエリは、提供された**正確な**用語のみを検索します。これは、`````term`````クエリが`````text`````フィールドを検索する際に、結果が悪いか、結果がない可能性があることを意味します。
  2. 検索結果の違いを確認するには、次の例を試してください。
  3. - 1*.* `````full_text`````という`````text`````フィールドを持つインデックスを作成します。
  4. #### Python
  5. ``````python
  6. resp = client.indices.create(
  7. index="my-index-000001",
  8. mappings={
  9. "properties": {
  10. "full_text": {
  11. "type": "text"
  12. }
  13. }
  14. },
  15. )
  16. print(resp)
  17. `

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. full_text: {
  7. type: 'text'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Go

  1. res, err := es.Indices.Create(
  2. "my-index-000001",
  3. es.Indices.Create.WithBody(strings.NewReader(`{
  4. "mappings": {
  5. "properties": {
  6. "full_text": {
  7. "type": "text"
  8. }
  9. }
  10. }
  11. }`)),
  12. )
  13. fmt.Println(res, err)

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. full_text: {
  6. type: "text",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "full_text": { "type": "text" }
  6. }
  7. }
  8. }
  • 2. full_textフィールドにQuick Brown Foxes!の値を持つドキュメントをインデックスします。

Python

  1. resp = client.index(
  2. index="my-index-000001",
  3. id="1",
  4. document={
  5. "full_text": "Quick Brown Foxes!"
  6. },
  7. )
  8. print(resp)

Ruby

  1. response = client.index(
  2. index: 'my-index-000001',
  3. id: 1,
  4. body: {
  5. full_text: 'Quick Brown Foxes!'
  6. }
  7. )
  8. puts response

Go

  1. res, err := es.Index(
  2. "my-index-000001",
  3. strings.NewReader(`{
  4. "full_text": "Quick Brown Foxes!"
  5. }`),
  6. es.Index.WithDocumentID("1"),
  7. es.Index.WithPretty(),
  8. )
  9. fmt.Println(res, err)

Js

  1. const response = await client.index({
  2. index: "my-index-000001",
  3. id: 1,
  4. document: {
  5. full_text: "Quick Brown Foxes!",
  6. },
  7. });
  8. console.log(response);

Console

  1. PUT my-index-000001/_doc/1
  2. {
  3. "full_text": "Quick Brown Foxes!"
  4. }

textフィールドはfull_textフィールドであるため、Elasticsearchは分析中にQuick Brown Foxes![quick, brown, fox]に変更します。

  • 3. full_textフィールドでQuick Brown Foxes!を検索するためにtermクエリを使用します。応答がより読みやすくなるようにprettyパラメータを含めてください。

Python

  1. resp = client.search(
  2. index="my-index-000001",
  3. pretty=True,
  4. query={
  5. "term": {
  6. "full_text": "Quick Brown Foxes!"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.search(
  2. index: 'my-index-000001',
  3. pretty: true,
  4. body: {
  5. query: {
  6. term: {
  7. full_text: 'Quick Brown Foxes!'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithIndex("my-index-000001"),
  3. es.Search.WithBody(strings.NewReader(`{
  4. "query": {
  5. "term": {
  6. "full_text": "Quick Brown Foxes!"
  7. }
  8. }
  9. }`)),
  10. es.Search.WithPretty(),
  11. )
  12. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. pretty: "true",
  4. query: {
  5. term: {
  6. full_text: "Quick Brown Foxes!",
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. GET my-index-000001/_search?pretty
  2. {
  3. "query": {
  4. "term": {
  5. "full_text": "Quick Brown Foxes!"
  6. }
  7. }
  8. }

Quick Brown Foxes!のフィールドにはもはや正確な用語Quick Brown Foxes!が含まれていないため、termクエリ検索は結果を返しません。

  • 4. full_textフィールドでQuick Brown Foxes!を検索するためにmatchクエリを使用します。

Python

  1. resp = client.search(
  2. index="my-index-000001",
  3. pretty=True,
  4. query={
  5. "match": {
  6. "full_text": "Quick Brown Foxes!"
  7. }
  8. },
  9. )
  10. print(resp)

Ruby

  1. response = client.search(
  2. index: 'my-index-000001',
  3. pretty: true,
  4. body: {
  5. query: {
  6. match: {
  7. full_text: 'Quick Brown Foxes!'
  8. }
  9. }
  10. }
  11. )
  12. puts response

Go

  1. res, err := es.Search(
  2. es.Search.WithIndex("my-index-000001"),
  3. es.Search.WithBody(strings.NewReader(`{
  4. "query": {
  5. "match": {
  6. "full_text": "Quick Brown Foxes!"
  7. }
  8. }
  9. }`)),
  10. es.Search.WithPretty(),
  11. )
  12. fmt.Println(res, err)

Js

  1. const response = await client.search({
  2. index: "my-index-000001",
  3. pretty: "true",
  4. query: {
  5. match: {
  6. full_text: "Quick Brown Foxes!",
  7. },
  8. },
  9. });
  10. console.log(response);

Console

  1. GET my-index-000001/_search?pretty
  2. {
  3. "query": {
  4. "match": {
  5. "full_text": "Quick Brown Foxes!"
  6. }
  7. }
  8. }

termクエリとは異なり、matchクエリは検索を実行する前に提供された検索用語Quick Brown Foxes!を分析します。matchクエリは、その後、quickbrown、またはfoxトークンをfull_textフィールドに含むドキュメントを返します。
以下は、結果にインデックスされたドキュメントを含むmatchクエリ検索の応答です。

Console-Result

  1. {
  2. "took" : 1,
  3. "timed_out" : false,
  4. "_shards" : {
  5. "total" : 1,
  6. "successful" : 1,
  7. "skipped" : 0,
  8. "failed" : 0
  9. },
  10. "hits" : {
  11. "total" : {
  12. "value" : 1,
  13. "relation" : "eq"
  14. },
  15. "max_score" : 0.8630463,
  16. "hits" : [
  17. {
  18. "_index" : "my-index-000001",
  19. "_id" : "1",
  20. "_score" : 0.8630463,
  21. "_source" : {
  22. "full_text" : "Quick Brown Foxes!"
  23. }
  24. }
  25. ]
  26. }
  27. }