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

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

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


当前回答

来自Kibana DevTools的:

GET my_index_name/_search
{
  "query": {
    "match_all": {}
  }
}

其他回答

注意:答案与Elasticsearch 0.90的旧版本有关。此后发布的版本有了更新的语法。请参考其他可能为您正在寻找的最新答案提供更准确答案的答案。

下面的查询将返回您希望返回的NO_OF_RESULTS ..

curl -XGET 'localhost:9200/foo/_search?size=NO_OF_RESULTS' -d '
{
"query" : {
    "match_all" : {}
  }
}'

现在,这里的问题是您希望返回所有记录。因此,在编写查询之前,您自然不会知道NO_OF_RESULTS的值。

我们如何知道文档中有多少条记录?只需键入下面的查询

curl -XGET 'localhost:9200/foo/_search' -d '

这会给你一个如下图所示的结果

 {
hits" : {
  "total" :       2357,
  "hits" : [
    {
      ..................

结果总数告诉您文档中有多少条记录可用。这是知道NO_OF RESULTS值的好方法

curl -XGET 'localhost:9200/_search' -d ' 

搜索所有索引中的所有类型

curl -XGET 'localhost:9200/foo/_search' -d '

搜索foo索引中的所有类型

curl -XGET 'localhost:9200/foo1,foo2/_search' -d '

搜索foo1和foo2索引中的所有类型

curl -XGET 'localhost:9200/f*/_search

搜索以f开头的索引中的所有类型

curl -XGET 'localhost:9200/_all/type1,type2/_search' -d '

在所有索引中搜索user和tweet类型

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

请注意size参数,它将每个分片显示的命中数从默认值(10)增加到1000。

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

除了@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

curl -X GET 'localhost:9200/foo/_search?q=*&pretty' 

简单!你可以使用size和from参数!

http://localhost:9200/[your index name]/_search?size=1000&from=0

然后逐渐改变,直到你得到所有的数据。