对弹性搜索不熟悉。编写一个返回我的集合中所有匹配记录的搜索查询时遇到问题。以下是我对搜索记录的查询
{
"size":"total no of record" // Here i need to get total no of records in collection
"query": {
"match": {
"first_name": "vineeth"
}
}
}
通过运行此查询,我只获得了最多10条记录,请确保我的集合中有超过10条匹配的记录。我搜索了很多,最后在查询中得到了大小参数。但在我的情况下,我不知道记录的总数。我认为提供无限数量的大小变量不是一个好习惯,所以如何管理这种情况请帮我解决这个问题,谢谢
答案 0 :(得分:5)
显示所有结果并不常见,而是使用from
和size
指定要获取的结果范围。因此,您的查询(用于获取前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>