Elasticsearch查询无结果:如何检索Excavation条目?
解决Elasticsearch嵌套数组字段查询无结果问题
你遇到的问题是刚接触Elasticsearch时很常见的嵌套字段查询坑——你要找的particulars并不是根级字段,它是嵌套在boqList数组对象里的子字段,直接用particulars作为查询目标,ES会去寻找根级别下的同名字段,而你的数据里根本不存在这个根级字段,所以自然返回0条结果。
下面给你两种针对性的解决方案:
方案1:使用正确的字段路径(适用于默认的object类型数组)
如果你的boqList字段是ES自动创建的默认类型(也就是object类型),只需要把查询字段修正为boqList.particulars即可:
POST http://localhost:9200/boqss/_search { "query":{ "match" : { "boqList.particulars":"Excavation" } } }
方案2:使用Nested查询(适用于手动设置为nested类型的数组)
如果你在创建索引时,特意把boqList设置成了nested类型(这种类型会保留数组对象的独立性,不会扁平化处理),那必须用nested查询来指定嵌套路径:
POST http://localhost:9200/boqss/_search { "query": { "nested": { "path": "boqList", "query": { "match": { "boqList.particulars": "Excavation" } } } } }
如何确认字段类型?
可以发送以下请求查看boqss索引的映射结构,以此判断该用哪种方案:
GET http://localhost:9200/boqss/_mapping
如果返回结果里boqList的类型是object,用方案1;如果是nested,用方案2。
内容的提问来源于stack exchange,提问作者sublime_archon
相关产品推荐
相关产品推荐

