首页 > 解决方案 > Elasticsearch 查询未返回多个应过滤器的预期结果

问题描述

我正在使用 Java 的 high-level-rest-api 执行 Elasticsearch 查询,并希望看到处于活动状态或没有参考 ID 的记录。我正在按名称查询记录,如果我直接使用 /_search?q= 命中索引,我会看到我想要的结果。

我的逻辑是否正确(伪代码):

postFilters.MUST {
  Should {
    MustNotExist {referenceId}
    Must {status = Active}
  }
  Should {
    MustNotExist {referenceId}
    Must {type = Person}        
  }
}

我得到的是具有参考 ID 的活动记录。但是,我想包含也没有 referenceId 的记录,因此我有 MustNotExist {referenceId}。

为简单起见,可以删除第二个 Should 子句(用于测试),因为第一个子句本身没有按预期工作。

标签: elasticsearch

解决方案


在我的例子中,我不得不使用匹配查询而不是术语查询,因为我查询的值不是原语或字符串。例如,Must, type = Person, Person 的部分是一个枚举,因此寻找“Person”并不完全正确,而 match 允许它“匹配”。


推荐阅读