我有一个名为socialmedia的索引,并试图用这个名为eng的字段创建查询(省略了一些不必要的字段)
"id" : "1",
"eng":
[
{
"soc_mm_score" : "3",
"date_updated" : "1520969306",
},
{
"soc_mm_score" : "1",
"date_updated" : "1520972191",
},
{
"soc_mm_score" : "4",
"date_updated" : "1520937222",
}
]
我从这个索引中有很多文档,其中包含eng嵌套字段,该字段也包含很多“子对象”
现在,我的主要目标是,我应该制定什么样的Elasticsearch查询来过滤这些嵌套对象
步骤1
获取具有最高date_updated值的嵌套对象
步骤2
在获得这些嵌套对象之后,执行一个总和聚合,这样我就可以为相应的“最新嵌套对象”添加soc_mm_score字段的所有值。
我试过这个查询,但似乎失败了
尝试#1(我使用的是elasticsearch-php API,所以请相信我的查询使用的是这种格式)
'aggs' => [
'ENG' => [
'nested' => [
'path' => 'eng'
],
'aggs' => [
'FILTER' => [
'filter' => [
'bool' => [
'must' => [
[
// I'm thinking of using max aggregation here
]
]
]
]
]
'LATEST' => [
'top_hits' => [
'size' => 1,
'sort' => [
'eng.date_updated' => [
'order' => 'desc'
]
]
]
]
]
]
]
Pro/S:它正在返回正确的嵌套对象CON/S:我无法执行进一步的聚合
我还有其他的方法可以执行这个吗?
回顾我的理想步骤:
制定了一个答案!
"aggs":{
"LATEST": {
"scripted_metric": {
"init_script" : """
state.te = [];
state.g = 0;
state.d = 0;
state.a = 0;
""",
"map_script" : """
if(state.d != doc['_id'].value){
state.d = doc['_id'].value;
state.te.add(state.a);
state.g = 0;
state.a = 0;
}
if(state.g < doc['eng.date_updated'].value){
state.g = doc['eng.date_updated'].value;
state.a = doc['eng.soc_te_score'].value;
}
""",
"combine_script" : """
state.te.add(state.a);
double count = 0;
for (t in state.te) {
count += t
}
return count
""",
"reduce_script" : """
double count = 0;
for (a in states) {
count += a
}
return count
"""
}
}
}
问题内容: 所以我有一个弹性的搜索索引,并且要向它发送带有时间戳的文档。我想知道是否有一种方法可以根据时间戳提取最后一个文档。即说要弹性给我最后一次的文档。 谢谢。 问题答案: 是的,您只需索取一个文档()并通过减少时间戳进行排序
让我们想象一下Elasticsearch索引,其中每个文档代表一个国家。Country具有城市字段,该字段定义为嵌套的。 示例映射(为了本示例的简洁性而简化): 我插入到索引中的文档如下所示: 是否可以组成一个返回所有城市(所有国家)并支持排序的查询 第一个返回页面(回复)将包含捷克共和国的10个城市,第二个页面将包含10个城市,其中四个(最后一个)来自捷克共和国,六个来自斯洛伐克。 我正在研究复
我能够在弹性搜索 6.8 中使用聚合查询获取数据库中文本字段的所有值: 我正在尝试为嵌套字段做同样的事情。 下面是文本字段(城市)和嵌套字段(冷却)的示例 下面是我一直引用的文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-bucket-terms-aggregation.html
我有一个简短的问题,似乎很简单,但到目前为止我还找不到任何答案。 我想在Elasticsearch节点上检索给日期字段的最后一个文档。但是我想有最后一个文档,只针对包含特定字段的文档。 例如,假设我想获得包含“PromotionCode”字段的最后一笔购买: 查询: 在store1是我的索引的地方,购买文档类型。 现在让我们假设我的ElasticSearch中有这两个文档: 如果我想获得最后一个文
我有带有实体和嵌套实体的索引。实体由、和嵌套变体组成。实体由、和字段组成。我需要按、和字段聚合搜索结果,以获得每个颜色、大小和价格组的产品数量。如果我对这些字段使用嵌套聚合,我会得到正确的buckes,但是bucket中的文档数是每个bucket的实体数。但是我需要获得每个bucket的实体(根文档)的数量。 例如,第一个产品有变体(红色,小,$10)、(绿色,小,$10)、(红色,中等,$11)
提取切片的最后一个元素的方式是什么? 上述解决方案可行,但似乎有些尴尬。