elasticsearch - ElasticSearch索引拓扑-字段覆盖

标签 elasticsearch

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

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

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

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

    我当时想将报表链接存储为文档中的嵌套字段。实际上,文档如下:
     {
       id: integer,
       tone: integer,
       reports: [
          { id: integer,
            tone: integer
          }
       ]
     }
    

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

    最佳答案

    有可能在1个查询中使用script fields

    我要做的是将嵌套报表重组为一个对象,如下所示:

      {
         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>"
                    }
                }
            }
       }
    

    您也可以通过脚本filtersortfacet

    关于elasticsearch - ElasticSearch索引拓扑-字段覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176204/

    相关文章:

    elasticsearch - 使用 channel ID分组获取最大值和最小值

    ruby-on-rails - 在 Rails 4.1 中使用 Searchkick gem 在 Elasticsearch 中设置 Facets

    Elasticsearch - 如何返回某些字段的不同文档

    Elasticsearch 查询数组索引

    ruby-on-rails - Rails elasticsearch 映射被忽略

    json - 同时使用 'terms'和 'missing'的Elasticsearch查询

    c# - 在嵌套Elasticsearch中使用原始字符串创建查询

    database - Elasticsearch作为聊天应用程序的主要数据源

    elasticsearch - match_phrase_prefix 不返回 match_phrase 获得的结果

    elasticsearch - 将 AWS Kinesis Firehose 回填到 Elasticsearch Service 失败记录