我正在使用Nest Elastic并使用Head插件构建布尔搜索查询,我正在组合多个查询
关于数据库结构和弹性映射的注释
在此查询中,我试图获取具有特定配置文件和属性值的所有文档> 30请记住,此属性应仅具有属性Id 2。
SQL查询:
从文档d内连接attributeValue av中选择av。*,d.name 上 d.DocumentId = av.DocumentId 其中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": { }
}
问题
结果还包含具有以下属性值
的文档不得包含此文件,因为它不符合我的需要。
如何构建此查询?
答案 0 :(得分:2)
解决方案是首先通过使lstChildren成为嵌套对象来更改映射。然后使用嵌套查询将确保满足指定的所有条件。下面的嵌套查询指定了两个只返回预期结果的条件,但我使用“Equal”代替“IntValue”的“大于”,以保持简单:
{
"query": {
"nested": {
"path": "lstChildren",
"query": {
"bool": {
"must": [
{
"match": {
"lstChildren.AttributeID":"2"
}
},
{
"match": {
"lstChildren.IntValue": "31"
}
}
]
}
}
}
}
}