elasticsearch - 使用多个应该查询
问题描述
我想获得类似于多个“组”但分开的文档。每个组都有自己的规则(条款)。当我尝试在“布尔”中使用多个应该查询时,我得到的项目是两个应该的术语的混合。例如,我想使用 1 个查询而不是 msearch。
有人可以帮我吗?
{
"explain": true,
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": [
{
"term": {
"p_id": "123"
}
},
{
"term": {
"p_id": "124"
}
}
]
}
},
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{
"bool": {
"minimum_should_match": 1,
"should": [
{
"term": {
"cat": "1"
}
},
{
"term": {
"cat": "2"
}
},
{
"term": {
"keys": "a"
}
},
{
"term": {
"keys": "b"
}
}
]
}
},
{
"bool": {
"minimum_should_match": 1,
"should": [
{
"term": {
"cat": "6"
}
},
{
"term": {
"cat": "7"
}
},
{
"term": {
"keys": "r"
}
},
{
"term": {
"keys": "u"
}
}
]
}
}
]
}
}
}
},
"from": 0,
"size": 3
}
解决方案
您可以尝试使用脚本在多个字段上使用术语聚合,并将热门点击聚合添加为子聚合。请注意,这将非常缓慢。在查询/过滤器之后添加它并根据需要调整大小参数
"aggs": {
"Cat_and_Keys": {
"terms": {
"script": "doc['cat'].values + doc['keys'].values"
},
"aggs":{ "separate_docs": {"top_hits":{"size":1 }} }
}
}
推荐阅读
- javascript - 等待所有 ajax 请求在变量循环中完成
- verilog - Verilog 中的元编程
- java - 这个元音问题有什么问题?超出索引
- python - Pandas:按多列 groupby 计算值
- elixir - Node.spawn/2 和 Process.spawn/1 有什么区别?
- visual-studio - 当我单击 VS Code 中的任意位置时,Live Server 关闭
- matlab - 使用一个 for 循环打印多个显示函数
- asp.net - 启动 IIS Express 托管 Web 项目 (VS2015) 时无法加载 DLL
- java - 无法解析方法“in(Java.util.concurrent.TimeUnit)”
- react-native - 导航后如何保持之前的状态