当前位置: 首页 > 面试题库 >

ElasticSearch:ElasticSearch中的IN等效运算符

梅欣然
2023-03-14
问题内容

我试图在SQL中找到与IN\ 等效的ElasticSearch查询NOT

我知道我们可以使用带有多个OR的QueryString查询来获得相同的答案,但这最终导致很多OR。

谁能分享这个例子?


问题答案:

与克里斯建议的评论类似,类似的替换INterms
过滤器
(查询暗示得分,这可能会改善返回的订单)。

SELECT * FROM table WHERE id IN (1, 2, 3);

等效的Elasticsearch 1.x过滤器为:

{
  "query" : {
    "filtered" : {
      "filter" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}

等效的Elasticsearch 2.x +过滤器为:

{
  "query" : {
    "bool" : {
      "filter" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}

重要的一点是,terms过滤器(以及与此相关的查询)可以在完全匹配的情况下工作。它隐含地是一个or操作,类似于IN

如果要反转它,可以使用not过滤器,但是我建议使用稍微冗长的bool/ must_not过滤器(以养成也使用bool/
must和的习惯bool)。

{
  "query" : {
    "bool" : {
      "must_not" : {
        "terms" : {
          "id" : [1, 2, 3]
        }
      }
    }
  }
}

总体而言,bool复合查询语法是Elasticsearch中最重要的过滤器之一,term(单数)和terms过滤器(复数)也是如此。



 类似资料:
  • 问题内容: 有没有一种“不错的”方式为SharePoint创建CAML查询,而这种方式呢? 还是我陷入了嵌套节点的噩梦? 编辑:这是我生成节点的解决方案。 用法: 输出: 也使使用查找字段的重载变得容易一些 问题答案: 不,您需要处理嵌套标签;这些是CAML上受支持的查询说明 也许CAML.NET可以帮助您完成任务。

  • 问题内容: 我有一个名为NUMS的表,其中只有n列。 然后在其中填充值1,2,3,4,5,null。 现在查询 在这种情况下,我想它已转换为 我也在比较n和一个应该产生未知值的null值,它应该返回一个空集。但是它返回1,2(null不返回,尽管包含在IN运算符中) 现在查询 …转换为: 在这里,我上面所说的有效,并且不返回任何内容。 任何人都可以详细解释发生了什么。 问题答案: 好,我找到了答案

  • 问题内容: 对于百万分之一的时间,我希望使用Java中的运算符,类似于SQL中的运算符。它可以作为编译器语法糖来实现。所以这 …真的很棒。实际上,以上内容与此处相当冗长的(且不适用于原始类型)构造相同: 或针对,和类似的类型: 也许会有更有效的实现。 题: 这样的东西会成为Java 8的一部分吗?如果没有,我该如何提出建议?还是我现在可以使用任何等效的构造? 问题答案: 使用op4j: 使用相同的

  • 问题内容: 我有下面的SQL,但无法正常工作 产品类别是婴儿礼物篮,关键字字段是婴儿礼物篮,婴儿礼物 基本上想在关键字列表中找到product_category时获得sub_category? 问题答案: 您将需要使用 使用规范化的数据库结构,这将更加容易和高效。(您当前在单个列中包含多个关键字的结构违反了第一个范式)

  • 我对这个结果很困惑。 是不同的对象,当处理时,它会比较第一个元素的地址,所以 的行为。 (*)是否等于 ? 是一个对象吗?和都指向这个物体的第一个元素?

  • 问题内容: 我经常使用Python,现在我正在快速学习JavaScript(或者应该说是重新学习)。所以,我想问问,JavaScript和的等效之处是什么? 问题答案: 最接近的成语是 利用函数定义中给定的参数个数这一事实。 您可以将其打包到一些帮助程序中,例如 然后做 如果您想使用语法糖,请编写一个函数,该函数将一个函数转换为另一个函数,该函数使用必需和可选参数调用,并将必需参数以及任何其他可选