我的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
}
我只想按发生次数分组并获取每个事件的数量,最多只能有十个数字。我尝试使用聚合,但存储桶为空。谢谢!
案例映射
PUT /index
{
"mappings": {
"doc": {
"properties": {
"querySearched": {
"type": "text",
"fielddata": true
}
}
}
}
}
您的查询应如下所示
GET index/_search
{
"size": 0,
"aggs": {
"result": {
"terms": {
"field": "querySearched",
"size": 10
}
}
}
}
您应该添加fielddata:true
以启用聚集 文本
类型的字段更多的是
"size": 10, => limit to 10
在与@Kamal简短讨论之后,我有义务告诉您,如果选择启用fielddata:true
,则必须知道它会占用大量堆空间。
通过我分享的链接:
字段数据会占用大量堆空间,尤其是在加载高基数的文本字段时。一旦将字段数据加载到堆中,它在该段的生命周期内将一直保留在堆中。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟命中。这就是默认情况下禁用字段数据的原因。
另一种选择(更有效的选择):
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
}
}
}
}
两种解决方案都可以,但是您应该考虑这一点。
希望能帮助到你
问题内容: 我有一些文件: 如何按地区过滤/选择不同的文档? 在SQL中,我可以使用GROUP BY。我尝试了条件聚合,但返回的计数却不同。 感谢您的帮助!:-) 问题答案: 如果您的ElasticSearch版本为1.3或更高版本,则可以使用top_hits类型的子聚合,默认情况下,它将为您提供按查询分数排序的前三个匹配文档(此处为1,因为您使用match_all查询)。 您可以将参数设置为3以
问题内容: 我将此数据插入了Elasticsearch: 旁注:重现: 1)下载:http://wmo.co/20160928_es_query/bulk.json 2)执行:卷曲-s -XPOST ‘ 的http://本地主机:9200 /测试/外部/ _bulk漂亮 ‘ -数据二进制@ bulk.json 问题: 获取每个“位置”有多少记录的计数。 解决方案1:存储桶聚合..没有得到期望的结果
问题内容: 我发现的唯一接近的事情是:Elasticsearch中的多个分组方式 基本上,我试图获得与以下查询等效的ES : 年龄和性别本身很容易获得: 这使: 但是现在我需要这样的东西: 请注意,这是针对年龄范围的“映射”,因此它们实际上表示的是:)而不是数字。例如,性别[1](“男性”)细分为[246]的年龄范围[0](“18岁以下”)。 问题答案: 由于您只有2个字段,因此一种简单的方法是使
我尝试使用Java8特性。 我有课 我的最后一个映射类是 因为我是刚到java的,我面临着要完成它的斗争,我尽了最大的努力。是否可以删除空文件和计数?提前致谢
我尝试使用Java8特性。 我有课 我有一个列表,我尝试按分组,并计算非空的和。示例: 我的预期输出是 我试着跟在后面 因为我是刚到java的,我面临着要完成它的斗争,我尽了最大的努力。是否可以删除空文件和计数?
问题内容: 我有一个与此类似的文件: 我要查询以查找所有包含“ a”的人(鲍勃和玛丽)。如何编写查询? 编辑: 当前查询: 问题答案: 在字段上使用术语过滤器/查询(例如)可以满足您的需求。假设您只想匹配满足该条件的任何文档,则完整查询将类似于: 之所以可行,是因为值数组是分别索引的,并且如果查询的字段是列表,则术语查询将查找包含包含该值的数组的文档。