弹性搜索大小无限制

时间:2014-03-14 12:43:11

标签: node.js elasticsearch

对弹性搜索不熟悉。编写一个返回我的集合中所有匹配记录的搜索查询时遇到问题。以下是我对搜索记录的查询

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

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

4 个答案:

答案 0 :(得分:5)

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

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

这比将size设置为一个非常大的值更有效。要查看与您的查询匹配的文档数量,您可以从响应中获得hits.total(总点击次数)。

答案 1 :(得分:3)

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

有关详细信息,请参阅

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

答案 2 :(得分:3)

要获取所有记录,根据文档,您应该使用滚动。 这是文档: 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来检索它们。

答案 3 :(得分:0)

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

在7.0.0中弃用:

GET /_search/scroll/<scroll_id>