我正在使用Nest Elastic并使用Head插件为布尔搜索构建查询,我正在合并多个查询
有关数据库结构和弹性映射的注释
在此查询中,我要获取具有特定配置文件和属性值> 30的所有文档,同时要记住,此属性应仅具有ID 2。
SQL查询:
从文档d内部联接attributeValue中选择av。*,d.name d.DocumentId = av.DocumentId上的av,其中d.profileid = 1和av.AttributeId = 2且av.Intvalue> 30
弹性查询
{ "query": { "bool": { "must": [ { "term": { "Document.profileid": "1" } } , { "term": {"Document.lstChildren.AttributeID": "2" } } , { "range": { "Document.lstChildren.IntValue": { "gt": "30"} } } , { "match_all": { } } ], "must_not": [ ], "should": [ ] } }, "from": 0, "size": 10, "sort": [ ], "facets": { } }
问题
结果还包含一个具有以下属性值的文档
不能包含此文档,因为它不能满足我的需求。
如何建立此查询?
解决方案是通过使lstChildren成为嵌套对象来首先更改映射。然后,使用嵌套查询将确保符合指定的所有条件。下面的嵌套查询指定了两个仅返回预期结果的条件,但是为了简单起见,我对“ IntValue”使用“等于”而不是“大于”:
{ "query": { "nested": { "path": "lstChildren", "query": { "bool": { "must": [ { "match": { "lstChildren.AttributeID":"2" } }, { "match": { "lstChildren.IntValue": "31" } } ] } } } } }