我很好奇是否可以在ElasticSearch中设置索引结构和查询,以便可以在尽可能少的查询中实现以下操作。

让我们定义系统中存在的一些东西。

  • 文档具有与其来源,数据类型等相关的大量信息。为简化起见,我们将为它们提供三个字段: idtonedate 它包含一些全文元素,但已经处理完毕
  • 报表中有一堆与搜索查询相关的信息。 为了我们的目的,它们分别存储。 它们也有一个ID,我们称为idReport
  • 剪辑报表文档之间的链接。 它以id - idReport映射的形式表示,可以具有第三个可选字段: tone的替代

我们系统中的主要障碍是,关联链接中存在的tone需要覆盖文档中所有方面的tone ,但不能替换。 有些报告可能认为文档是肯定的,而另一些报告则认为它是中立的,甚至是肯定的。

我正在考虑将报表链接存储为文档中的嵌套字段。 实际上,文档如下:

 {
   id: integer,
   tone: integer,
   reports: [
      { id: integer,
        tone: integer
      }
   ]
 }

关键问题是在一个查询中是否有可能使用嵌套字段中存在的任何内容无缝覆盖该音调。 如果没有,最好的前进方向是什么?

===============>>#1 票数:2 已采纳

可以在1个查询中使用脚本字段

我要做的是将嵌套报表重组为这样的对象:

  {
     id: integer,
     tone: integer,
     reports: {
       idA: {
         tone: integer
       } ,
       idB: {
         tone: integer
       } 
     }
   }

然后进行类似的查询,该查询返回“ toneWithFallback”作为包含所需内容的字段:

    {
        "query" : {
           ...
        },
        "script_fields" : {
            "toneWithFallback" : {
                "script" : "_source.reports[reportId].empty || _source.reports[reportId].tone.empty ? _source.reports[reportId].tone: _source.tone ",
                "params" : {
                    "reportId"  : "<theIdAsAString>"
                }
            }
        }
   }

您还可以按脚本过滤排序构面

  ask by Sébastien Renauld translate from so

未解决问题?本站智能推荐: