我有一套文件,例如
{
tags:['a','b','c']
// ... a bunch properties
}
如标题中所述:是否可以使用Nest过滤包含给定标签的所有文档?
例如,上面的记录将匹配[‘c’,’d’]
还是应该手动构建多个“ OR”?
编辑:下面的位集可能是有趣的读物,但答案本身有点过时。
其中一些功能在2.x中有所变化。Slawek还在另一个答案中指出,terms
在这种情况下,查询是使搜索干燥的一种简便方法。最后重构为当前最佳实践。—nz
您可能需要带有子句的Bool查询(或更可能是Filter与另一个查询一起)should
。
该布尔查询有三个主要属性:must
,should
,和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,当时浏览器没有广泛支持数组过滤方法和箭