如何在top_hits聚合

时间:2015-09-24 05:53:00

标签: elasticsearch aggregation duplicate-removal

我有弹性搜索集群 - 版本1.3.0。此集群的索引文档没有启用_source,因此在检索匹配时,我通常根据请求中的“fields”参数获取。

现在我正在为重复的分组功能实施top_hits聚合。我想在top_hits结果中找到我现在无法执行的字段,因为我的映射中默认情况下未启用_source。你可以建议我选择/解决这个问题,而不改变现有的映射吗?

我在top-hits aggregation doc找不到它。对此的任何帮助都非常感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用script fields

  "aggs": {
    "sample": {
      "top_hits": {
        "size": 1,
        "script_fields": {
          "field1": {
            "script": "doc['field1']"
          },
          "field2": {
            "script": "doc['field2']"
          }
          ...
        }
      }
    }
  }

,如果分析了field1field2,则需要一个应保留该字段not_analyzed版本的子字段。为什么?因为,如果以任何方式分析普通字段,doc['field']调用将返回已分析的字词,而不是已编入索引的初始内容。

这样的事情:

  "mappings": {
    "test": {
      "_source": {
        "enabled": false
      }, 
      "properties": {
        "field1": {
          "type": "string",
          "fields": {
            "notAnalyzed": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }

查询:

  "aggs": {
    "sample": {
      "top_hits": {
        "size": 1,
        "script_fields": {
          "field1": {
            "script": "doc['field1.notAnalyzed']"
          }
        }
      }
    }
  }