我有弹性搜索集群 - 版本1.3.0。此集群的索引文档没有启用_source,因此在检索匹配时,我通常根据请求中的“fields”参数获取。
现在我正在为重复的分组功能实施top_hits
聚合。我想在top_hits
结果中找到我现在无法执行的字段,因为我的映射中默认情况下未启用_source
。你可以建议我选择/解决这个问题,而不改变现有的映射吗?
我在top-hits aggregation doc找不到它。对此的任何帮助都非常感激。
谢谢!
答案 0 :(得分:1)
"aggs": {
"sample": {
"top_hits": {
"size": 1,
"script_fields": {
"field1": {
"script": "doc['field1']"
},
"field2": {
"script": "doc['field2']"
}
...
}
}
}
}
但,如果分析了field1
或field2
,则需要一个应保留该字段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']"
}
}
}
}
}