- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;DR - 如何检查其中之一和全部嵌套数组满足指定条件?
我有一个文档
。每个 document
都有一个嵌套的 outer
对象数组,它们本身有一个嵌套的 inner
对象列表。我需要对所有至少一个文档的外部
嵌套对象匹配的文档执行过滤器。当我说匹配时,我的意思是所有 outer
嵌套对象的inner
对象以某种方式匹配。这是一个示例映射以供引用;
{ "document" : {
"properties" : {
"name" : {
"type" : "string"
},
"outer" : {
"type" : "nested",
"properties" : {
"inner" : {
"type" : "nested",
"properties" : {
"match" : {
"type" : "string",
"index" : "not_analyzed"
},
"type" : {
"type" : "string",
"index" : "not_analyzed"
}
}}}}}}
}
如果文档没有outer
/inner
对象,则认为匹配。但更糟糕的是,内部对象需要考虑以一种条件逻辑方式(例如 SQL 中的 CASE
)根据 type
进行不同的匹配。例如,如果 type
是术语 "Country"
那么 inner
对象将被认为匹配如果 匹配
是指定的国家代码,例如 ES
。文档可能具有不同类型
的内部
对象,并且不保证特定类型将存在。
来自命令式 (Java) 编程背景的我在弄清楚如何实现这种过滤方面遇到了难以置信的困难。我能想到的任何东西甚至都模糊地符合这种行为。到目前为止,我所拥有的只是过滤后的查询;
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"bool" : {
"should" : {
"missing" : {
"field" : "outer.inner.type"
}
}}}}
}
那么,问题是……
我如何过滤到具有至少一个 outer
对象且具有所有 inner
对象匹配的文档基于内部
对象的类型
?
根据要求提供更多详细信息-
{
"name":"First",
"outer":[
{
"inner":[
{"match":"ES","type":"Country"},
{"match":"Elite","type":"Market"}
]
},{
"inner":[
{"match":"GBR","type":"Country"},
{"match":"1st Class","type":"Market"},
{"match":"Admin","type":"Role"}
]
}
],
"lockVersion":0,"sourceId":"1"
}
如果我们要提供"1st Class"
市场和国家"GRB"
,上面的例子应该通过过滤器,因为两个 outer
对象中的第二个将被视为匹配,因为两个 inner
对象都匹配。但是,如果我们提供国家 "GRB"
和市场 "Elite"
那么我们将不会返回此文档,因为 outer
code> 对象会麻烦它们的 inner
对象完全匹配。如果我们希望第二个 outer
对象匹配,那么所有三个 inner
都需要匹配。请注意,在第三个inner
中有一个额外的type
。这会导致这样一种情况:如果存在一个类型,那么它需要匹配它else它不需要匹配,因为它缺席。
最佳答案
让嵌套数组中的一个匹配某些条件变得非常简单。 nested filter如果嵌套对象数组中的任何一个与指定的内部过滤器匹配,则计算结果为匹配/真。例如,给定一个 outer
对象数组,其中一个对象的字段 match
的值为 "matching"
将考虑以下内容是的。
"nested": {
"path": "outer",
"filter": {
"term" : { "match" : "matching" }
}
}
如果 其中一个 嵌套的 outer
对象有一个名为 match
且值为 的字段,则以上内容将被视为真实/匹配“匹配”
。
只有当数组中的所有嵌套对象匹配时才认为嵌套过滤器匹配更有趣。事实上,这是不可能的。但是考虑到如果只有一个嵌套对象与过滤器匹配就被认为是匹配的,我们可以颠倒逻辑并说“如果嵌套对象的没有 不匹配”实现我们所需要的。例如,给定一个嵌套的 outer.inner
对象数组,其中所有这些对象都有一个字段 match
,其值为 "matching"
,如下所示将被认为是真实的。
"not" : {
"nested": {
"path": "outer.inner",
"filter": {
"not" : {
"term" : { "match" : "matching" }
}
}
}
}
以上将被认为是真实的/匹配的,因为没有嵌套的outer.inner
对象不(双重否定)有名为 match
的字段,值为 "matching"
。当然,这与所有嵌套内部
对象具有匹配
字段且值为“匹配”
.
您无法使用传统的 missing filter 检查是否缺少包含嵌套对象的字段.这是因为嵌套对象实际上根本不在文档中,它们存储在其他地方。因此 missing filters将永远被认为是真实的。但是,您可以做的是检查 match_all
过滤器是否不返回这样的结果;
"not": {
"nested": {
"path": "outer",
"filter": {
"match_all": {}
}
}
}
如果 match_all
没有找到结果,则这被认为是正确的/匹配的。
关于arrays - Elasticsearch - 过滤其中(嵌套数组之一)和(所有嵌套数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608969/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!