Elasticsearch父/子。如何在子字段

时间:2016-10-07 09:13:10

标签: sorting elasticsearch parent-child parent

到目前为止,我可以过滤父母与孩子,并在儿童字段上对答案进行排序,就像魅力一样。见下文。

GET /parent_child_meta_poc/paren_doc/_search
{
  "query": {
    "has_child": {
      "inner_hits": {},
      "type": "most_read_doc",
      "query": {
        "function_score": {
          "functions": [
            {
              "field_value_factor": {
                "factor": 1,
                "field": "read_count"
              }
            }
          ]
        }
      },
      "score_mode": "avg"
    }
  }
}

来源:Matts gist

子映射示例:

{
  "mappings": {
    "most_read_doc": {
      "_parent": {
        "type": "paren_doc"
      },
      "properties": {
        "parent_uri": {
          "type": "string"
        },
        "read_count": {
          "type": "long"
        }
      }
    }
  }
}

然而,这种限制来自于以下要求:

向我提供符合此搜索条件的所有文档,仅返回包含子项“most_read_doc”的文档,并在“most_read_doc.read_count”上对返回的父文档进行排序

基本上我想:

  1. 查询父文档。
  2. 仅返回包含“most_read_doc”子项的“父级”结果。
  3. 按“most_read_doc.read_count”排序。
  4. 父/子似乎没有达到1.在任何类型的查询导致“嵌套:QueryParsingException ...没有为[functions]注册查询”“异常。根据我的搜索,没有正式的Elasticsearch解决方案。到目前为止,努力寻找一个可以解决这个问题的工作......

    其他类似:

    注意:我无法使用嵌套文档/将“read_count”与父项合并,因为我有两个系统对此索引应用更新。

    1. 系统 x 将父文档插入索引,覆盖任何具有给定ID的先前文档,此处没有部分更新功能。
    2. 系统 y 获取大多数读取文档的Google Analytics数据元数据,并通过ID插入与父级关联的子文档。这样系统 x 可以在不影响孩子的情况下进行插入/替换父文件。

0 个答案:

没有答案