首页 > 解决方案 > 基于过滤结果的弹性搜索过滤

问题描述

是否可以根据另一个过滤器的结果过滤文档?

例如,如果我过滤文档

"_source": [ "animalName" ],
{ "term":  { "animalType": "dog" }}

如何过滤选择所有名称为狗的动物?

标签: elasticsearchkibana

解决方案


假设您希望所有类型为 dog 的动物都具有名称$someName,请尝试以下操作:

{
  "_source: ["animalName", "animalWeight", ...],
  "query": {
    "bool": {
      "filter": [{
        "term": {"animalType": "dog"}
      },{
        "term": {"animalName": $someName}
      }]
    }
  }
}

[Udate]
你的意思是这样的?

select distinct a2.*
from animals a1
  join animals a2 on a1.name = a2.name
where 1
  and a1.type = 'dog'
  and a2.type != 'dog'

我不知道如何在弹性中实现这一点,因为“SQL 风格的连接”“非常昂贵” [1]


推荐阅读