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

过滤哪个数组包含任何给定值的项目

东郭思远
2023-03-14
问题内容

我有一套文件,例如

{
    tags:['a','b','c']
    // ... a bunch properties
}

如标题中所述:是否可以使用Nest过滤包含给定标签的所有文档?

例如,上面的记录将匹配[‘c’,’d’]

还是应该手动构建多个“ OR”?


问题答案:

编辑:下面的位集可能是有趣的读物,但答案本身有点过时。
其中一些功能在2.x中有所变化。Slawek还在另一个答案中指出,terms在这种情况下,查询是使搜索干燥的一种简便方法。最后重构为当前最佳实践。—nz

您可能需要带有子句的Bool查询(或更可能是Filter与另一个查询一起)should

该布尔查询有三个主要属性:mustshould,和must_not。这些中的每一个都接受另一个查询或查询数组。子句名称是不言自明的;在您的情况下,该should子句可以指定一个列表过滤器,与其中任何一个匹配项将返回您要查找的文档。

从文档:

在没有must子句的布尔查询中,一个或多个should子句必须与文档匹配。可以使用minimum_should_match参数设置应匹配的最少应子句数。

这是一个独立的Bool查询的示例:

{
  "bool": {
    "should": [
      { "term": { "tag": "c" }},
      { "term": { "tag": "d" }}
    ]
  }
}

这是该布尔查询作为另一个通用过滤查询中的过滤器的另一个示例:

{
  "filtered": {
    "query": {
      "match": { "title": "hello world" }
    },
    "filter": {
      "bool": {
        "should": [
          { "term": { "tag": "c" }},
          { "term": { "tag": "d" }}
        ]
      }
    }
  }
}

使用Bool作为查询(例如,影响比赛的得分)还是将其用作过滤器(例如,减少随后被得分或后过滤的命中),这取决于您的要求。

通常最好使用Bool代替Or
Filter
,除非您有使用And / Or /
Not的理由(确实存在此类理由)。Elasticsearch博客提供了有关每种实现的更多信息,并提供了有关何时可能更喜欢Bool而不是And / Or /
Not(反之亦然)的好示例。

Elasticsearch博客:关于Elasticsearch过滤器位集的所有信息

使用重构的查询进行更新…

现在,所有的 出的方式,terms查询是以上所有的机版本。对于引擎盖下的查询类型,它做的是正确的事情,其行为与使用选项的bool+
相同,并且总体而言更为简洁。should``minimum_should_match

这是最后一个查询的重构:

{
  "filtered": {
    "query": {
      "match": { "title": "hello world" }
    },
    "filter": {
      "terms": {
        "tag": [ "c", "d" ],
        "minimum_should_match": 1
      }
    }
  }
}


 类似资料:
  • 一旦我将类别从数组更改为映射,我想我可以使用多个where条件来过滤文档 现在问题2,firebase要求为复合查询添加索引。我在每个文档中保存的类别是动态的,我无法提前添加这些索引。在这种情况下,理想的解决方案是什么?如有任何帮助,不胜感激。

  • 问题内容: 我的文件看起来像: 我现在想要的是进行术语搜索,其中给定数组可能看起来像: 预期命中应在哪里: 但是,当我执行类似的查询时: 由于示例1和示例2都包含tag1或tag3,因此获得了“示例1”和“示例2”作为匹配。通过查看文档中的术语,我发现术语实际上是一个包含查询。 在这种情况下,如何在使用tag1和tag3查询时确保示例2是唯一匹配项? 问题答案: 您需要通过添加到过滤器来将 执行模

  • 我有两个数组 我想检查是否包含中的任何项。基于这里的帖子,我有以下代码,它只适用于chrome

  • 问题内容: 我有两个NumPy数组,例如: 和一个过滤器数组,例如: 我如何才能得到一个新的numpy数组,其中仅包含其中相同索引为True的值?就我而言:。 根据公认的解决方案(具有不同的值): 问题答案: NumPy支持布尔索引 假设 和是NumPy数组而不是Python列表(如问题所示)。您可以使用进行转换。

  • 问题内容: 嘿,我想知道是否有人知道使用正则表达式或通配符(或SQL中的pehaps )的方式,以便可以使用JSONPath在大量JSON数据内进行搜索。 例如(是的,我正在解析,而不是在应用程序中读取数据): 我希望能够浏览这样的数据: 其中参数的内容是数据对中部分或全部值的一部分。 目前,我只找到文件上,,,和关系运算符,它不给我那么多的灵活性。 有谁知道一个方法可以让我只是 刚刚 JSONP

  • 问题内容: 我有一个像 如何检查此数组以查看Magenic是否存在?除非必须,否则我不想循环播放。我正在处理几千条记录。 更新 由于这是一个受欢迎的帖子,所以我想分享一些新发现。看来@CAFxX已经分享了!我应该更经常阅读这些内容。 借助 ECMAScript 2015 ,使用新的箭头功能甚至更加简单: 问题答案: 2018 edit :这个答案来自2011,当时浏览器没有广泛支持数组过滤方法和箭