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

cyb*_*der 2 elasticsearch

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

{
'name': 'somename',
'data': '{"age": 25}'
}
Run Code Online (Sandbox Code Playgroud)

如何搜索像

{"match": {"data.age": 25}}
Run Code Online (Sandbox Code Playgroud)

Ami*_*wal 5

您需要为字段使用嵌套数据类型data,然后可以使用同一文档中给出的示例来查询嵌套字段。

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

"nested": {
      "path": "data",
Run Code Online (Sandbox Code Playgroud)

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

索引映射

{
    "mappings": {
        "properties": {
            "name" : {
                "type" : "text"
            },
            "data": {
                "type": "nested"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

索引请求

{
    "name": "somename",
    "data": {
        "age": 25
    }
}
Run Code Online (Sandbox Code Playgroud)

搜索请求

{
    "query": {
        "nested": {
            "path": "data",
            "query": {
                "match": {
                    "data.age": 25
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以及搜索结果

"hits": [
            {
                "_index": "nested",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "name": "somename",
                    "data": {
                        "age": 25
                    }
                }
            }
        ]
Run Code Online (Sandbox Code Playgroud)