【问题标题】:Sorting and latest records in ElasticSearchElasticSearch 中的排序和最新记录
【发布时间】:2012-07-23 07:00:54
【问题描述】:

我有两个与 ElasticSearch 相关的问题。

1) 有什么方法可以指定我希望特定字段的结果按降序排序? 一个等效的 SQL 查询将是:

select * from table1 where a="b" order by myprimarykey desc;

2) 如何获取第一条和最后一条(最新)记录?

【问题讨论】:

    标签: lucene elasticsearch


    【解决方案1】:

    1) Elasticsearch 具有相当复杂的Sorting API,允许您控制排序顺序。因此,在 elasticsearch 中,相当于您的 MySql 查询将如下所示:

    {
        "query" : {
            "term" : { "a" : "b" }
        },
        "sort" : [
            { "myprimarykey" : "desc"} }
        ]
    }
    

    也可以在 _search URI 上指定排序。

    2) 要检索第一条和最后一条记录,您需要使用descasc 排序顺序执行两次搜索,并分别检索一条记录。可以使用 Multi Search API 组合这两个查询。

    【讨论】:

    • 关于第二点,我尝试使用“desc”和“match all”查询。但问题是结果中的“命中”显示大量记录数,而不是 1。这是否意味着即使我想要 1 条记录,所有记录都被扫描并返回一条记录?我只需要一个第一条和/或最后一条记录(当然使用单独的查询)。
    • 大记录数是您的“全部匹配”查询找到的记录数。所以,是的,它会找到所有记录并只检索一条,但这并不意味着它会在 SQL 术语中进行全表扫描。这是一个相当轻量级的过程。
    • 好的。最后一件事.. 如果索引中有几百万条记录,上述查询的性能会受到影响吗?
    • 性能会受到影响,它总是会随着记录数量的增长而受到影响,但它可能仍然非常快。对于您的用例来说,它是否足够快很难说。这取决于您的要求和排序键的类型。我建议用您的数据对其进行测试。
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2021-07-18
    • 2020-10-07
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多