我在Elasticsearch中有一个小数据库,出于测试目的,我想把所有记录拉回来。我正在尝试使用表单的URL…

http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}

有人能给我你要用来完成这个的URL吗?


当前回答

默认情况下Elasticsearch返回10条记录,因此应该显式提供大小。

添加大小与请求,以获得所需的记录数量。

http://{host}:9200/{index_name}/_search?pretty=true&size=(number的记录)

注意: 最大页面大小不能超过索引。Max_result_window索引设置,默认值为10,000。

其他回答

http://localhost:9200/foo/_search/?size=1000&pretty=1

您需要指定大小查询参数,因为默认值是10

除了@Akira Sendoh,没有人回答如何实际获得所有文档。但是即使是这个解决方案也会使我的ES 6.3服务在没有日志的情况下崩溃。对我来说,使用底层elasticsearch-py库唯一有效的是通过使用scroll() api的扫描助手:

from elasticsearch.helpers import scan

doc_generator = scan(
    es_obj,
    query={"query": {"match_all": {}}},
    index="my-index",
)

# use the generator to iterate, dont try to make a list or you will get out of RAM
for doc in doc_generator:
    # use it somehow

然而,现在更简洁的方法似乎是通过elasticsearch-dsl库,它提供了更抽象、更简洁的调用,例如:http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hits

如果它是一个小数据集(例如1K记录),你可以简单地指定大小:

curl localhost:9200/foo_index/_search?size=1000

不需要match all查询,因为它是隐式的。

如果你有一个中等规模的数据集,比如1M的记录,你可能没有足够的内存来加载它,所以你需要滚动。

滚动就像数据库中的游标。在Elasticsearch中,它会记住你离开的地方,并保持相同的索引视图(即防止搜索器随着刷新而离开,防止段合并)。

api方面,你必须添加一个滚动参数到第一个请求:

curl 'localhost:9200/foo_index/_search?size=100&scroll=1m&pretty'

你会得到第一页和一个滚动ID:

{
  "_scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADEWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ==",
  "took" : 0,
...

请记住,您获得的滚动ID和超时都对下一页有效。这里一个常见的错误是指定了一个非常大的超时(scroll的值),这将涵盖处理整个数据集(例如1M条记录)而不是一个页面(例如100条记录)。

要获取下一页,请填写最后一个滚动ID和一个超时,该超时应该持续到获取以下页面:

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_search/scroll' -d '{
  "scroll": "1m",
  "scroll_id": "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAADAWbmJlSmxjb2hSU0tMZk12aEx2c0EzUQ=="
}'

如果你有很多东西要导出(例如1B文档),你会想要并行化。这可以通过切片滚动来实现。假设您想在10个线程上导出。第一个线程会发出这样的请求:

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
  "slice": {
    "id": 0, 
    "max": 10 
  }
}'

您将返回第一页和一个滚动ID,与正常的滚动请求完全相同。你会像普通的滚动一样使用它,除了你得到的数据只有十分之一。

其他线程也会做同样的事情,除了id是1,2,3…

默认情况下Elasticsearch返回10条记录,因此应该显式提供大小。

添加大小与请求,以获得所需的记录数量。

http://{host}:9200/{index_name}/_search?pretty=true&size=(number的记录)

注意: 最大页面大小不能超过索引。Max_result_window索引设置,默认值为10,000。

elasticsearch(ES)既支持GET请求,也支持POST请求,以便从ES集群索引中获取数据。

当我们执行GET操作时:

http://localhost:9200/[your index name]/_search?size=[no of records you want]&q=*:*

当我们做POST时:

http://localhost:9200/[your_index_name]/_search
{
  "size": [your value] //default 10
  "from": [your start index] //default 0
  "query":
   {
    "match_all": {}
   }
}   

我建议使用elasticsearch http://mobz.github.io/elasticsearch-head/的UI插件 这将帮助您更好地了解您创建的索引,并测试您的索引。