带有多个条件的Elasticsearch OR条件

先知Helenus

我需要使用一组全局过滤器和扩展的OR子句在Elasticsearch中查询特定结果,其中OR子句中的每种情况都由特定的条件元组组成。换句话说,它是这样的:'获取与以下全局过滤器匹配的记录:category ='foo'和name ='bar'。从该集合中,获取记录,其中关键字(x,y,z)与以下任意匹配:(1、2、3),(4、5、6)或(7、8、9)。

例如,如果我有以下项目:

Item 1:
   category: foo, name: bar,
   x: 1, y: 2, z: 3

Item 2:
   category: foo, name: baz,
   x: 1, y: 2, z: 3

Item 3:
   category: foo, name: bar,
   x: 4, y: 5, z: 6

Item 4:
   category: foo, name: bar,
   x: 10, y: 11, z: 12

搜索不应返回第2项(因为它失败了name ='bar'的全局条件)或第4项(因为它具有(x,y,z)=(10,11,12),不是以下项之一)我指定的/允许的元组)。它应该返回其他项,它们与全局条件都匹配,并且属于x,y,z值的指定/允许的元组列表。

我知道我可以为每个项目发出一个简单的查询;但我认为这样做效率很低,因为每次都需要指定10K元组或更多的数量。

抱歉,如果已经回答;现有的答案之一可能已经适合于此,但是我对于Elasticsearch来说还太陌生,无法识别如何做到这一点。

环境:Python 3.8中的elasticsearch 7.10.1。

Opster ES忍者Nishant

干得好,

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "category": "foo"
          }
        },
        {
          "term": {
            "name": "bar"
          }
        },
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "x": 1
                      }
                    },
                    {
                      "term": {
                        "y": 2
                      }
                    },
                    {
                      "term": {
                        "z": 3
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "x": 4
                      }
                    },
                    {
                      "term": {
                        "y": 5
                      }
                    },
                    {
                      "term": {
                        "z": 6
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "must": [
                    {
                      "term": {
                        "x": 7
                      }
                    },
                    {
                      "term": {
                        "y": 8
                      }
                    },
                    {
                      "term": {
                        "z": 9
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

您所需要的只是bool查询,它带有mustandshould子句的组合

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Elasticsearch必须具有多个条件

来自分类Dev

Excel:多个匹配条件(带有IF抛出)

来自分类Dev

带有 IF、ISNUMBER、SEARCH 的多个条件

来自分类Dev

Odoo - 在 attrs 中带有 OR 的多个条件

来自分类Dev

带有 if 条件的多个 using 语句

来自分类Dev

有多个条件的条件验证

来自分类Dev

在多个列上按匹配顺序排序(并带有多个条件)

来自分类Dev

带有 IF 条件的 awk

来自分类Dev

使用带有嵌套对象的条件的spring-data-elasticsearch

来自分类Dev

Javascript有多个条件?

来自分类Dev

有多个条件的求和

来自分类Dev

有多个条件选择

来自分类Dev

VLOOKUP有多个条件?

来自分类Dev

Elasticsearch NEST:具有多个条件的排序项聚合

来自分类Dev

elasticsearch-具有多个条件的术语过滤器

来自分类Dev

带有多个where /条件的mysql select语句

来自分类Dev

替代带有多个条件的嵌套ifelse语句的长列表

来自分类Dev

带有多个布尔条件的mysql内部联接查询

来自分类Dev

删除带有条件的<br>标记的多个实例

来自分类Dev

带有多个条件的python lambda列表过滤

来自分类Dev

地块:如何根据条件绘制多个带有颜色的地块?

来自分类Dev

R中带有group_by的多个条件语句?

来自分类Dev

jQuery:基于带有或条件的多个事件执行任务

来自分类Dev

从多个表中获取带有条件的SUM()

来自分类Dev

带有子查询的多个条件(SWITCH或IIF)

来自分类Dev

替代带有多个条件的嵌套ifelse语句的长列表

来自分类Dev

带有关联和多个条件的 Rails where 子句

来自分类Dev

带有多个 XML 标签的 XPath 多重验证条件

来自分类Dev

带有 OR 条件的多个 wordpress 类别 IF 不起作用

Related 相关文章

热门标签

归档