kan*_*rbk 8 java elasticsearch
我们使用haschild查询根据条件查找父文档.
我们有两种类型
漏斗样本文档
{
"funnel_id": "12345",
"path": "a -> b -> c"
}
{
"funnel_id": "56789",
"path": "a -> d"
}
Run Code Online (Sandbox Code Playgroud)
**页面示例文档**
{
"_parent": "12345",
"visited_page": "/home"
}
{
"_parent": "12345",
"visited_page": "/cart"
}
{
"_parent": "12345",
"visited_page": "/cart"
}
Run Code Online (Sandbox Code Playgroud)
条件1:
查找基于父文档的子文档" visited_page "值包含"home".
"must" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"value" : ".*home.*",
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}
Run Code Online (Sandbox Code Playgroud)
它完美地运作.
条件2
查找基于父文档的子文档" visited_page "值不包含"home".
"must_not" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"value" : ".*home.*",
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}
Run Code Online (Sandbox Code Playgroud)
但是此查询返回了错误的结果.
输出查询
{
"funnel_id": "12345",
"path": "a -> b -> c"
}
{
"funnel_id": "56789",
"path": "a -> d"
}
Run Code Online (Sandbox Code Playgroud)
您可以看到父ID(funnel_id:12345)子文档包含值为"home"的已访问页面.但这也会回归.
预期结果
{
"funnel_id": "56789",
"path": "a -> d"
}
Run Code Online (Sandbox Code Playgroud)
小智 1
我相信你“不能”在错误的地方尝试:
"must" : {
"has_child" : {
"query" : {
"regexp" : {
"url" : {
"must_not": {
"value" : ".*home.*"
},
"flags_value" : 65535
}
}
},
"child_type" : "session_pages"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |