有没有一种方法可以在带有嵌套json的elasticsearch中进行搜索?

时间:2020-08-04 12:56:22

标签: elasticsearch

在弹性搜索中,数据已按以下格式保存:

{
'name': 'somename',
'data': '{"age": 25}'
}

如何搜索

{"match": {"data.age": 25}}

2 个答案:

答案 0 :(得分:3)

您需要在data字段中使用nested data type,然后才能使用同一文档中提供的示例来查询嵌套字段。

简而言之,如果索引正确,则需要在查询中包含nested path

"nested": {
      "path": "data",

根据您的示例添加端到端工作示例

索引映射

{
    "mappings": {
        "properties": {
            "name" : {
                "type" : "text"
            },
            "data": {
                "type": "nested"
            }
        }
    }
}

索引请求

{
    "name": "somename",
    "data": {
        "age": 25
    }
}

搜索请求

{
    "query": {
        "nested": {
            "path": "data",
            "query": {
                "match": {
                    "data.age": 25
                }
            }
        }
    }
}

和搜索结果

"hits": [
            {
                "_index": "nested",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "name": "somename",
                    "data": {
                        "age": 25
                    }
                }
            }
        ]

答案 1 :(得分:2)

GET / myIndex / _search

{
  "query": {
    "nested": {
      "path": "data",
      "query": {
          {"match": {"data.age": 25}}
      }
    }
  }
}

有关更多信息,请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html