我是Elasticsearch的新手,我的程序有问题。
为了将结果分组,如SQL中的“group by”语句。我使用了聚合。
但我意识到这里有一个问题需要解决。我使用以下语句对我的结果进行分组:
{
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"agg2": {
"terms": {
"field": "field2"
},
"aggs": {
"agg3": {
"terms": {
"field": "field3"
}
}
}
}
}
}
}
}
我的问题是:字段2和字段3的值取决于字段1的值,所以如果你可以得到字段1的值,你也可以得到字段2和字段3的值。因此,像上面这样进行聚合会花费很多时间来完成我的程序(我已经测试过它,并意识到它比只对字段1进行分组花费了6倍的时间)。
所以我的问题是:是否可以只对字段1进行分组(只使用一个“aggs”),但也可以获得字段2和字段3的值?
如果没有,那么还有其他可能的方法来完成我的工作吗?
提前感谢:)
如果我理解正确,您正在寻找热门搜索聚合,您可以使用源筛选包含任意数量的字段,请尝试以下操作
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"include_fields": {
"top_hits": {
"size": 100,
"_source": {
"include": [
"field2",
"field3"
]
}
}
}
}
}
}
}
我在elasticsearch中有一个文档索引,每个文档有480个字段。我试图做的是搜索一个词(例如“Apple”),并获得所有其值与搜索词匹配的唯一字段名。所以如果我的文档是: 作为查询的结果,我希望得到如下所示的聚合: 由于每个文档都有480个字段,所以我更喜欢执行multi_match查询,而不是使用包含所有字段的筛选器: 这个查询在ElasticSearch中可能吗?
这个问题不是如何通过多个字段进行聚合,我们可以使用子聚合。 如果你知道SQL,我可以给你一个完美的解释: 我们能在Elasticsearch中实现这一点吗? 谢谢。
问题内容: 我想在字段上使用stats或extended_stats聚合,但是找不到完成此操作的任何示例(即,似乎只能将聚合与实际文档字段一起使用)。 是否有可能计算出“元数据”在ElasticSearch查询响应每个命中字段请求集合(例如,,,,等等)? 我假设答案是“否”,因为未对类似字段进行索引… 问题答案: 注意:就最新版本的Elasticsearch而言,原始答案现在已过时。使用Groo
问题内容: 我试图找到与当前正在查看的标签相关的标签。我们索引中的每个文档都被标记。每个标签由两部分组成-ID和文本名称: 要获取相关标签,我只是查询文档并获取其标签的集合: 这非常有效,我得到了想要的结果。但是,我需要标签ID 和 名称才能执行任何有用的操作。我已经探索了如何做到这一点,解决方案似乎是: 索引时合并字段 将字段拼凑在一起的脚本 嵌套聚合 选项1和2对我不可用,因此我一直在使用3,
这工作得很完美,我得到了我想要的结果。但是,我需要标记ID和名称来做任何有用的事情。我已经探索了如何实现这一点,解决方案似乎是: 索引时合并字段 将字段集中在一起的脚本 嵌套聚合 选项一和选项二对我来说是不可用的,所以我一直在用3,但它没有以预期的方式做出反应。给定以下查询(仍在搜索还标记有“饼干”的文档): 我会得到这个结果: 嵌套聚合包括搜索项和我要搜索的标记(按字母顺序返回)。 我曾试图通过
问题内容: 我正在尝试创建一个脚本字段,该脚本字段将计算两个时间戳之间的时间差,然后在该脚本字段上聚合一个。 我首先尝试: 在合计平均值下产生价值。 然后我尝试了: 生成了一条错误消息,内容为:“在映射中找不到[timedifference]的字段” 问题答案: 简单地将脚本移到聚合上怎么样?