【问题标题】:Elastic Search size to unlimited弹性搜索大小无限制
【发布时间】:2014-03-14 12:43:10
【问题描述】:

我是弹性搜索的新手。我面临一个问题,要编写一个返回我的集合中所有匹配记录的搜索查询。以下是我对搜索记录的查询

{
   "size":"total no of record" // Here i need to get total no of records in collection
   "query": {
      "match": {
         "first_name": "vineeth"
      }
   }
}

通过运行此查询,我最多只能获得 10 条记录,我确信我的集合中有超过 10 条匹配记录。我搜索了很多,最后在查询中得到了 size 参数。但就我而言,我不知道记录的总数。我认为给大小变量提供无限数量不是一个好习惯,所以如何管理这种情况请帮我解决这个问题,谢谢

【问题讨论】:

    标签: node.js elasticsearch


    【解决方案1】:

    显示所有结果并不常见,而是使用fromsize 指定要获取的结果范围。因此,您的查询(用于获取前 10 个结果)应如下所示:

    {
        "from": 0,
        "size": 10,
        "query": {
            "match": {
                "first_name": "vineeth"
            }
        }
    }
    

    这应该比将size 设置为一个大得离谱的值更好。要检查有多少文档与您的查询匹配,您可以从响应中获取 hits.total(点击总数)。

    【讨论】:

    • 感谢您的帮助,在我的情况下,我不知道我的收藏中有多少匹配记录。所以我不能将它设置为任何静态值。当我按照你所说的那样使用 hits.total 时,我认为我必须运行相同的搜索查询两次。首先运行搜索查询以查找 hits.total。然后在第二个查询中分配总大小。是这样吗?
    • 我不确定您的问题到底是什么。假设您的查询有 21 个结果。您调用 ` { from: 0, size: 10 }, ...` 并获得前 10 个结果和总命中数 (21)。因此,当您需要结果 11-20 时,您可以提出另一个请求 {from: 10, size: 10 } ...。现在您想获得最后 (21.) 项,再次调用 {from: 20, size: 10 } 您现在将在回复 hits.hits 中获得 1 次点击。当您想知道查询将返回多少个结果时,可以使用count
    • 谢谢,现在很清楚了。我想像 mysql 那样在一个查询中获取所有 20 条记录。我会按照你说的那样工作。
    【解决方案2】:

    要获取所有记录,您还可以使用滚动概念.. 就像数据库中的游标..
    如果你使用滚动,你可以批量获取文档。它会减少 CPU 使用率和内存使用率。

    更多信息请参考

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html

    【讨论】:

    • 我不知道谁对答案投了反对票。如果你投反对票,请说出原因并投反对票...
    【解决方案3】:

    要获取所有记录,根据 de doc,您应该使用滚动。 这是文档: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-scroll.html

    但想法是指定您的搜索并指出您要滚动它:

    curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '
    {
       "query": {
        "match" : {
            "title" : "elasticsearch"
         }
     }
    }'
    

    在滚动参数中,您指定希望搜索结果可用多长时间。

    然后您可以使用返回的 scroll_id 和滚动 api 来检索它们。

    【讨论】:

      【解决方案4】:

      在新版本的 elastic(例如 7.X)中,最好使用分页而不是滚动(已弃用): https://www.elastic.co/guide/en/elasticsearch/reference/current/paginate-search-results.html

      在 7.0.0 中已弃用:

      GET /_search/scroll/<scroll_id>
      

      【讨论】:

        猜你喜欢
        • 2013-01-02
        • 2023-03-26
        • 2012-01-24
        • 1970-01-01
        • 1970-01-01
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        相关资源
        最近更新 更多