我们正在使用 haschild 查询根据条件查找父文档。
我们有两种类型
漏斗示例文档
{
"funnel_id": "12345",
"path": "a -> b -> c"
}
{
"funnel_id": "56789",
"path": "a -> d"
}
**页样本doc **
{
"_parent": "12345",
"visited_page": "/home"
}
{
"_parent": "12345",
"visited_page": "/cart"
}
{
"_parent": "12345",
"visited_page": "/cart"
}
条件1:
查找基于父文档的子文档" visited_page "价值包含" home"。
"must" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"value" : ".*home.*",
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}
效果很好。
条件2
查找基于父文档的子文档" visited_page "价值不包含" home"。
"must_not" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"value" : ".*home.*",
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}
但是这个查询返回了错误的结果。
查询的输出
{
"funnel_id": "12345",
"path": "a -> b -> c"
}
{
"funnel_id": "56789",
"path": "a -> d"
}
您可以看到父ID(funnel_id:12345)子文档包含值为" home"的已访问页面。但这也会回归。
预期结果
{
"funnel_id": "56789",
"path": "a -> d"
}
答案 0 :(得分:1)
我相信你已经"必须不在错误的地方 尝试:
"must" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"must_not": {
"value" : ".*home.*"
},
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}