我正在尝试从聚合查询中获得某些术语的索引文档中的亮点。
我的索引具有以下形式:
{
"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所述,但这没有用。
我感觉高亮显示试图匹配查询字符串,并且由于没有一个,所以它什么也没做。如何获得将术语聚合中的键视为匹配项?