我的ElasticSearch 6.5.2索引看起来像:
{
"_index" : "searches",
"_type" : "searches",
"_id" : "cCYuHW4BvwH6Y3jL87ul",
"_score" : 1.0,
"_source" : {
"querySearched" : "telecom",
}
},
{
"_index" : "searches",
"_type" : "searches",
"_id" : "cSYuHW4BvwH6Y3jL_Lvt",
"_score" : 1.0,
"_source" : {
"querySearched" : "telecom",
}
},
{
"_index" : "searches",
"_type" : "searches",
"_id" : "eCb6O24BvwH6Y3jLP7tM",
"_score" : 1.0,
"_source" : {
"querySearched" : "industry",
}
我想要一个返回此结果的查询:
"result":
{
"querySearched" : "telecom",
"number" : 2
},
{
"querySearched" : "industry",
"number" : 1
}
我只想按发生次数分组并获取每个事件的数量,最多只能有十个数字。我尝试使用聚合,但存储桶为空。 谢谢!
答案 0 :(得分:2)
设置您的映射
PUT /index
{
"mappings": {
"doc": {
"properties": {
"querySearched": {
"type": "text",
"fielddata": true
}
}
}
}
}
您的查询应类似于
GET index/_search
{
"size": 0,
"aggs": {
"result": {
"terms": {
"field": "querySearched",
"size": 10
}
}
}
}
您应该添加fielddata:true
以便为文本类型字段more of that
"size": 10, => limit to 10
与@Kamal简短讨论后,我有义务告诉您,如果您选择启用fielddata:true
,则必须知道
它会消耗很多堆空间。
通过我分享的链接:
Fielddata会占用大量堆空间,尤其是在加载高基数的文本字段时。字段数据一旦加载到堆中,就在该段的生命周期内保持在那里。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟问题。这就是默认情况下禁用字段数据的原因。
另一种选择(一种更有效的选择):
PUT /index
{
"mappings": {
"doc": {
"properties": {
"querySearched": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
然后进行汇总查询
GET index/_search
{
"size": 0,
"aggs": {
"result": {
"terms": {
"field": "querySearched.keyword",
"size": 10
}
}
}
}
两种解决方案都可以,但是您应该考虑this。
希望有帮助
答案 1 :(得分:0)
您尝试了什么?
开机自检 / searches / _search
{
"size": 0,
"aggs": {
"byquerySearched": {
"terms": {
"field": "querySearched",
"size": 10
}
}
}
}