Elasticsearch查询排除另一个查询的结果

时间:2018-07-01 22:11:01

标签: elasticsearch kibana

简化的“文章”的Elasticsearch索引包含具有字段<project-id>bq init的文档,以及一些其他内容。

domain_name仅限于少数几个关键字值,例如tagtag,其中source1在每个文档中只能有一个值。 source2是每个文档中的单个值

我想从tag的另一个查询中返回domain_name不包含tag=source1的一组文档

分两个步骤进行操作:

设置为排除

domain_name

将处理结果以生成tag=source2值的数组,每个返回文档中的一个。

然后,第二个查询将获取它关心的所有项目,然后排除不需要的项(上一个查询的域名列表)。

查询减号设置为排除

{
  "query": {
    "term" : { "tag" : "source2" } 
  }
}

在单个查询中还是使用聚合可能吗?索引和结果集不会很大,因此我对性能的担心比对便利性的担心。

奖金问题,这可以直接在Kibana中定义吗?

2 个答案:

答案 0 :(得分:0)

对于我来说,我使用编程语言(Java)执行第一个查询并通过第一个查询获取文档的结果数组,然后将查询结果的ID存储在数组中,并使用包含第一个查询的ID的该数组执行第二个查询询问 弹性不支持嵌套查询

答案 1 :(得分:0)

为避免两次调用,请使用嵌套查询或(has_child和has_parent)查询。 请参阅Elasticsearch Doc