当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch 5组合bool术语和嵌套术语筛选器

常俊侠
2023-03-14

对于嵌套查询术语筛选器https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html和布尔术语筛选器https://www.elastic.co/guide/en/elasticsearch/reference/5.5/query-dsl-bool-query.html有文档

嵌套是对象数组。不只是物体。这一点,我不能使用简单的布尔术语过滤器。

我的查询如下所示:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "access_account.nid": 17,
            "destroyed_at": null
          }
        }
      ],
      "must": {
        "match_all": {}
      }
    },
    "nested": {
      "path": "categories",
      "query": {
        "bool": {
          "filter": [
            {
              "terms": {
                "categories.id": [
                  15, 17
                ]
              }
            }
          ]
        }
      }
    }
  }
}

过滤器是数组,因为我实际上有更多的过滤器。

我得到了以下响应reason“:”[bool]格式错误的查询,预期为[END_OBJECT],但找到了[FIELD_NAME]“

有什么解决方案如何组合父项/嵌套项筛选器吗?官方文件无济于事。

我的弹性版本是5.4

谢了。

共有1个答案

元玮
2023-03-14

就快到了,您的嵌套查询只需要进入bool/filter子句:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "access_account.nid": 17,
            "destroyed_at": null
          }
        },
        {
          "nested": {
            "path": "categories",
            "query": {
              "bool": {
                "filter": [
                  {
                    "terms": {
                      "categories.id": [
                        15,
                        17
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}
 类似资料:
  • 问题内容: 我在elasticsearch(YML中的定义)中具有字段的下一个映射: 每个文档都有很多过滤器,看起来像: 我试图获取唯一过滤器名称的列表以及每个过滤器的唯一过滤器值的列表。 我的意思是,我想获得结构是怎样的:Rahmengröße: 39.5厘米 45.5厘米 33.5厘米 颜色: 盖尔布 为了得到它,我尝试了几种聚合的变体,例如: 这个请求是错误的。 它将为我返回唯一过滤器名称的

  • 我在elasticsearch中对嵌套字段使用复合聚合,但我想从结果中排除一些术语。 此聚合正在工作: 但是我想从stk2中排除一些术语, 上述查询不起作用。 更新1:结果应该只省略数组元素,而不是包含“cancel”的整个文档。 我使用的是弹性v6.7

  • 问题内容: 我正在尝试使用以下查询对以下数据进行elasticsearch来执行术语聚合,输出将名称分解为标记(请参见下面的输出)。因此,我尝试将os_name映射为multi_field,但现在无法通过它查询。是否可以有没有令牌的索引?例如“ Fedora Core”? 查询: 数据: 输出: 映射: 问题答案: 实际上,您应该像这样更改映射 并且您的aggs应该更改为:

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 术语 通用术语 Blockchain:区块链,基于密码学的可实现信任化的信息存储和处理技术。 CA:Certificate Authority,负责证书的创建、颁发,在 PKI 体系中最为核心的角色。 Chaincode:链上代码,运行在区块链上提前约定的智能合约,支持多种语言实现。 Decentralization(去中心化):无需一个第三方的中心机构存在。 Distributed(分布式):非

  • 统一特殊词汇的翻译标准,请按字典序记录。 a 英文 中文 address space 地址空间 allocator 分配器 b 英文 中文 boot loader 引导加载器 buffer cache 缓冲器高速缓存,块缓冲 c 英文 中文 (sleep/wakeup) channel (睡眠/唤醒)队列 console 控制台 context 上下文 convoy 护航 coroutine 共行