dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

Elasticsearch で nested フィールドを検索

2024-02-24 21:21:58 | elasticsearch
Elasticsearch で nested フィールドに対する検索のメモ。
■インデックス
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "id": {"type": "keyword", "store": "true"},
      "tags": {
        "type": "nested",
        "properties": {
          "tag": {"type": "keyword", "store": "true"}
        }
      },
      "status": {"type": "integer", "store": "true"}
      }
    }
  }
}

■bulk でデータ登録
{"index": {"_id": "doc_1"}}
{"id": "doc_1", "tags": [{"tag": "abc"}, {"tag": "def"}], "status": 1}

{"index": {"_id": "doc_2"}}
{"id": "doc_1", "tags": [{"tag": "def"}, {"tag": "ghi"}], "status": 1}

{"index": {"_id": "doc_3"}}
{"id": "doc_1", "tags": [{"tag": "ghi"}, {"tag": "jkl"}], "status": 1}

■検索クエリ
{
  "query": {
    "bool": {
      "must": [
        {"term": {"status": 1}},
        {"nested": {
            "path": "tags",
          "query": {"term": {"tags.tag": "def"}}
        }}
      ]
    }
  }
}

■検索結果
{
  ...,
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.0296195,
    "hits" : [
      {
        "_index" : "test_nested_01",
        "_id" : "doc_1",
        "_score" : 2.0296195,
        "_source" : {
          "id" : "doc_1",
          "tags" : [
            {
              "tag" : "abc"
            },
            {
              "tag" : "def"
            }
          ],
          "status" : 1
        }
      },
      {
        "_index" : "test_nested_01",
        "_id" : "doc_2",
        "_score" : 2.0296195,
        "_source" : {
          "id" : "doc_1",
          "tags" : [
            {
              "tag" : "def"
            },
            {
              "tag" : "ghi"
            }
          ],
          "status" : 1
        }
      }
    ]
  }
}


この記事についてブログを書く
« python で画像をリサイズ | トップ | MySQL の check 制約 »

elasticsearch」カテゴリの最新記事