查询Elasticsearch上各类型的最新文档

2023-12-04

我正在尝试在 Elasticsearch 上运行看似简单的查询,但我似乎无法获得我正在寻找的结果。

这是我正在尝试做的事情的一个简短示例:

我有一个新闻数据库。每条新闻都包含来源、标题、时间戳和用户。

我想要获取给定用户的每个可用来源的最后一个(基于时间戳的)标题。

#!/bin/bash

export ELASTICSEARCH_ENDPOINT="http://localhost:9200"

# Create indexes

curl -XPUT "$ELASTICSEARCH_ENDPOINT/news" -d '{
    "mappings": {
        "news": {
            "properties": {
                "source": { "type": "string", "index": "not_analyzed" },
                "headline": { "type": "object" },
                "timestamp": { "type": "date", "format": "date_hour_minute_second_millis" },
                "user": { "type": "string", "index": "not_analyzed" }
            }
        }
    }
}'

# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "CNN", "headline": "Great news", "timestamp": "2015-07-28T00:07:29.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "CNN", "headline": "More great news", "timestamp": "2015-07-28T00:08:23.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "ESPN", "headline": "Sports news", "timestamp": "2015-07-28T00:09:32.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "ESPN", "headline": "More sports news", "timestamp": "2015-07-28T00:10:35.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "Mary", "source": "Yahoo", "headline": "More news", "timestamp": "2015-07-28T00:11:54.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "Mary", "source": "Yahoo", "headline": "Crazy news", "timestamp": "2015-07-28T00:12:31.000"}
'

那么我如何获取 John 的最新 CNN 和 ESPN 头条新闻呢?

我一直在研究多重搜索 API,但这意味着我需要事先了解所有来源(在本例中为 CNN 和 ESPN)。


首先,请注意,我必须更改您的映射headline字段到string,如您的示例文档标题所示string是而不是objects.

因此,像下面这样的查询将检索您期望的内容:

curl -XPOST "$ELASTICSEARCH_ENDPOINT/news/_search" -d '{
  "size": 0,
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "user": "John"           <--- filter for user=John
        }
      }
    }
  },
  "aggs": {
    "sources": {
      "terms": {
        "field": "source"          <--- aggregate by source
      },
      "aggs": {
        "latest": {
          "top_hits": {
            "size": 1,             <--- only take the first...
            "_source": [           <--- only the date and headline
               "headline",
               "timestamp"
            ],
            "sort": {
              "timestamp": "desc"  <--- ...and only the latest hit
            }
          }
        }
      }
    }
  }
}'

这会产生这样的结果:

{
  ...
  "aggregations" : {
    "sources" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [ {
        "key" : "CNN",
        "doc_count" : 2,
        "latest" : {
          "hits" : {
            "total" : 2,
            "max_score" : null,
            "hits" : [ {
              "_index" : "news",
              "_type" : "news",
              "_id" : "AU7Sh3VDGDddn2ZNuDVl",
              "_score" : null,
              "_source":{
                  "headline": "More great news", 
                  "timestamp": "2015-07-28T00:08:23.000"
              },
              "sort" : [ 1438042103000 ]
            } ]
          }
        }
      }, {
        "key" : "ESPN",
        "doc_count" : 2,
        "latest" : {
          "hits" : {
            "total" : 2,
            "max_score" : null,
            "hits" : [ {
              "_index" : "news",
              "_type" : "news",
              "_id" : "AU7Sh3VDGDddn2ZNuDVn",
              "_score" : null,
              "_source":{
                   "headline": "More sports news", 
                   "timestamp": "2015-07-28T00:10:35.000"
              },
              "sort" : [ 1438042235000 ]
            } ]
          }
        }
      } ]
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查询Elasticsearch上各类型的最新文档 的相关文章

随机推荐

  • DriveFolder.listChildren() 未显示其所有子项

    我正在制作一个与谷歌驱动器一起使用的应用程序 我需要获取文件夹内所有文件的列表 但似乎不可能 当我调用 listFiles 方法 时 我无法获取 DriveFolder 内的所有文件 但不仅如此 在我得到的文件列表中 还有一些我之前删除的文
  • 获取 Azure 服务总线中的消息统计信息

    我正在编写一个实用程序来监视我们的 Azure 服务总线主题和订阅 我可以获得主题详细信息 例如名称 排队消息计数和死信消息计数 但我想获取已处理的消息数 这是我正在使用的代码 var sub namespaceManager GetSub
  • 使用“print”时语法无效? [复制]

    这个问题在这里已经有答案了 我正在学习 Python 甚至无法编写第一个示例 print 2 100 这给出了SyntaxError invalid syntax 指着2 为什么是这样 我用的是3 1版本 那是因为在 Python 3 中
  • Android SimpleCursorAdapter 没有这样的列 Id

    我有一个 Listview 我想用 SQLite 数据库中的信息填充它 这似乎是最实用的解决方案 在我的调试器中 它说这是由以下原因引起的 IllegalArgumentException 没有这样的列 身份证不存在 这是我试图填充它的ja
  • 使用 .net WebApi 的包含图像的 HTML 页面

    我正在使用 net Web Api 通过 JSON 数据公开不同的端点 现在我需要特定端点返回 HTML 页面 我是这样实现的 HttpGet Route htmlPage htmlPageId public HttpResponseMes
  • 为什么 URL 位于 XML 命名空间中?

    以这一行为例
  • 如何为我的 git 存储库设置默认别名或其他配置?

    我想为 git 存储库设置一些默认别名和其他配置 以便当新用户克隆它时 他们可以在该项目中立即使用这些别名 即 我想做 git clone
  • 与 cloudFront 中的最小、最大和默认 TTL 混淆

    我的 Web 应用程序位于 S3 中 并使用 cloudFront 的 Web 发行版为该应用程序提供服务 我给了官方文档读过 但对很多术语感到困惑 我的问题 我想将cloudFront缓存设置为最长1年 365天 为此 我需要做什么 我们
  • 扩展 CodeIgniter 中的模型

    好吧 我是 CodeIgniter 框架的新手 我正在尝试构建一个通用模型类 看 class Basic Model extends CI MODEL function construct Call the Model constructo
  • 如何使用 AWS Cognito 限制自定义 api 访问

    我在我的应用程序中使用 Spring Boot 在搜索一些 IAM 工具时 我实际上很喜欢 Auth0 但我负担不起他们的定价 所以 我找到了另一个叫AWS Cognito 下面是Auth0来限制我们自定义的访问api https auth
  • 如何使用 python 从 Azure Cosmos DB 读取数据

    我有一个 Azure 试用帐户 并将一些 JSON 文件上传到 CosmosDB 中 我正在创建一个 python 程序来查看数据 但我在这样做时遇到了困难 这是我到目前为止的代码 import pydocumentdb documents
  • Android Studio Logcat 过滤器不显示

    我在 Ubuntu 13 10 上使用 AndroidStudio 0 4 0 在 0 3 2 上遇到同样的问题 一切都很好 直到我在 Android 和 ddms ddms 视图中丢失了 logcat 过滤实用程序和设备选择侧栏 然而 程
  • Facebook android sdk如何获取给定页面的点赞数

    我想获取给定页面及其 id 的点赞数 这里是图形API请求我想用 facebook android sdk 进行翻译 我不知道如何制作它 如果我尝试 我会收到错误 Bundle params new Bundle params putStr
  • 如何在 Chrome 中播放 .avi 文件格式的视频?

    从技术上讲 可以通过直接在 HTML 中加载外部播放器的嵌入对象来播放 avi 文件 现在铬已弃用该功能和解决方案将我的所有视频文件转码为 mp4 Edited因为我不拥有这些文件 所以我不会假装对它们进行转码 我期待着一种方法来重新启用旧
  • 将坐标外推到画布对象的边缘

    我正在编写一个浏览器应用程序 试图发现图像中的兴趣点 一旦我计算出这些点 我就会在它们之间画一条线 我的应用程序需要将这些线条推断到画布的边缘 有谁有 javascript 中线性图计算的经验吗 我已经进行了演示 function func
  • 以编程方式在闪亮仪表板中切换侧边栏菜单的显示

    我正在使用 R 闪亮仪表板 想知道是否可以使用附加按钮折叠 显示侧边栏 就像侧边栏顶部已有的按钮一样 那可能吗 Cheers 您可以通过以下方式向正文添加 删除所需的 css 类shinyjs library shiny library s
  • pyodbc 在 sp_prepexec 之后调用 sp_unprepare。这会影响参数化查询的性能吗?

    继续 SqlAlchemy pymssql 原始参数化查询会使用相同的执行计划吗 我从 pymssql 切换到 pyodbc 尝试将参数化查询发送到 SQL Server 带有 Microsoft 驱动程序的 pyodbc 可以解决问题 但
  • 操作委托使用在 foreach 循环外部声明的变量的最后一个值[重复]

    这个问题在这里已经有答案了 我有这段代码 int i 0 foreach var tile in lib dic Values var ii i var t tile Button b new Button gt MainStatic ti
  • MySQL 无法存储 UTF8 字符

    找不到我无法在 MySQL 数据库中存储 等字符的原因 我的表定义是 CREATE TABLE IF NOT EXISTS gen admin words translated id int 10 NOT NULL AUTO INCREME
  • 查询Elasticsearch上各类型的最新文档

    我正在尝试在 Elasticsearch 上运行看似简单的查询 但我似乎无法获得我正在寻找的结果 这是我正在尝试做的事情的一个简短示例 我有一个新闻数据库 每条新闻都包含来源 标题 时间戳和用户 我想要获取给定用户的每个可用来源的最后一个