如何按对象键而不是对象属性使用弹性搜索嵌套查询

萨吉曼

按照本文中针对嵌套查询的 Elastic Search 示例,我注意到它假定嵌套对象位于 ARRAY 内,并且查询基于某个对象 PROPERTY:

{
    nested_objects: [   <== array
         { name: "x", value: 123 },
         { name: "y", value: 456 }  <== "name" property searchable
    ]
}

但是,如果我希望嵌套对象排列在使用新对象更新的键值结构中,并且我想通过 KEY 进行搜索,该怎么办?例子:

{
    nested_objects: {   <== key-value, not array
         "x": { value: 123 },
         "y": { value: 456 }  <== how can I search by "x" and "y" keys?
         "..."  <=== more arbitrary keys are added now and then
    ]
}

谢谢!

萨吉曼

好的,所以我在一些 ES 见解之后的最终解决方案如下: 1. 我的对象键“x”、“y”、...是任意的事实导致索引映射混乱。所以一般来说,规划这种结构不是一个好的ES实践......所以为了映射,我求助于“加权标签”文章中描述的结构:

{ "name":"x", "value":123 },
{ "name":"y", "value":456 },
...
  1. 这意味着,当需要更新名为“x”的子对象的值时,我很难(也更慢)找到它:我首先需要查询整个顶级对象,遍历子对象对象,直到我找到一个名为“x”的对象,然后更新它的值。然后我将整个子对象数组更新回 ES。

  2. 如果我有多个进程更新同一索引,上述方法也会导致并发问题。ES 具有乐观锁定,我可以在需要时使用它重试,或者,我可以对更新进行排队并串行处理它们

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章