如何在没有查询字符串的情况下使用top_hits获得Elasticsearch术语聚合的重点?

时间:2019-05-23 19:32:07

标签: elasticsearch elastic-stack elasticsearch-aggregation

我正在尝试从聚合查询中获得某些术语的索引文档中的亮点。

我的索引具有以下形式:

{
  "adminfilelemma" : {
    "mappings" : {
      "properties" : {
        "text" : {
          "type" : "text",
          "analyzer" : "hunspell_english"
        },
        "title" : {
          "type" : "text",
          "analyzer" : "hunspell_english"
        },
        "words" : {
          "properties" : {
            "word" : {
              "type" : "keyword"
            }
          }
        }
      }
    }
  }
}

单词字段是单词数组。这些单词来自文本字段,经过归一化和词形化处理(墙,墙,墙,墙-> wall)。

此查询有效,并返回带有每个单词和索引中文档数量的存储桶。

GET /adminfilelemma/_search
{
    "size": 0,
    "aggs" : {
        "text" : {
            "terms": {
                "field" : "words.word",
                "size": 1000
            }
        }
    }
}

响应示例:

{
  "took" : 14,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 19,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "text" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 2,
      "buckets" : [
        {
          "key" : "balloon",
          "doc_count" : 18
        },
        {
          "key" : "dial",
          "doc_count" : 16
        },
        {
          "key" : "door",
          "doc_count" : 16
        },
...

我想在索引文档的那些存储桶中获得每个键的亮点。在ES文档中,它说我们可以使用top_hits进行询问。

但是以下查询似乎不起作用。它仅返回热门匹配,不包含任何突出显示字段/数组。

GET /adminfilelemma/_search
{
  "size": 0,
    "aggs" : {
        "text" : {
            "terms": {
                "field" : "words.word",
                "size": 100
            },
            "aggs": {
                "best_hits": {
                    "top_hits": {
                      "_source": ["title", "text"], 
                      "size": 10,
                      "highlight": {
                        "fields": {"text": {}}
                      }
                    }
                }
            }
        }
    }
}

我已经尝试过在查询的末尾添加突出显示请求,如此处https://github.com/elastic/elasticsearch/issues/16526所述,但这没有用。

我感觉高亮显示试图匹配查询字符串,并且由于没有一个,所以它什么也没做。如何获得将术语聚合中的键视为匹配项?

0 个答案:

没有答案