我在Elasticsearch中有一个小型数据库,出于测试目的,我希望将所有记录拉回来。我正在尝试使用表单的URL ...
http://localhost:9200/foo/_search?pretty=true&q={'matchAll':{''}}
有人可以给我一个你用来完成此任务的网址吗?
答案 0 :(得分:652)
我认为支持lucene语法:
http://localhost:9200/foo/_search?pretty=true&q=*:*
尺寸默认为10,因此您可能还需要&size=BIGNUMBER
才能获得超过10件商品。 (其中BIGNUMBER等于您认为比您的数据集更大的数字)
但是,弹性搜索文档suggests用于使用扫描搜索类型的大型结果集。
EG:
curl -XGET 'localhost:9200/foo/_search?search_type=scan&scroll=10m&size=50' -d '
{
"query" : {
"match_all" : {}
}
}'
然后根据上面的文档链接继续请求。
编辑:scan
在2.1.0中弃用。
scan
排序的常规scroll
请求相比, _doc
不提供任何好处。 link to elastic docs(由@ christophe-roussy发现)
答案 1 :(得分:121)
http://127.0.0.1:9200/foo/_search/?size=1000&pretty=1
^
请注意尺寸参数,这会将默认(10)显示的点击次数增加到每个碎片1000次。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
答案 2 :(得分:30)
elasticsearch(ES)支持从ES集群索引获取数据的GET或POST请求。
当我们进行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插件 这将帮助您更好地了解您创建的索引并测试索引。
答案 3 :(得分:23)
注意:答案与旧版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结果的价值的好方法
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 '
在所有索引中搜索类型用户和推文
答案 4 :(得分:17)
This is the best solution I found using python client
# Initialize the scroll
page = es.search(
index = 'yourIndex',
doc_type = 'yourType',
scroll = '2m',
search_type = 'scan',
size = 1000,
body = {
# Your query's body
})
sid = page['_scroll_id']
scroll_size = page['hits']['total']
# Start scrolling
while (scroll_size > 0):
print "Scrolling..."
page = es.scroll(scroll_id = sid, scroll = '2m')
# Update the scroll ID
sid = page['_scroll_id']
# Get the number of results that we returned in the last scroll
scroll_size = len(page['hits']['hits'])
print "scroll size: " + str(scroll_size)
# Do something with the obtained page
https://gist.github.com/drorata/146ce50807d16fd4a6aa
Using java client
import static org.elasticsearch.index.query.QueryBuilders.*;
QueryBuilder qb = termQuery("multi", "test");
SearchResponse scrollResp = client.prepareSearch(test)
.addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
//Scroll until no hits are returned
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//Handle the hit...
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
} while(scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.
https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search-scrolling.html
答案 5 :(得分:10)
使用server:9200/_stats
也可以获取有关所有别名的统计信息..例如每个别名的大小和元素数量,这非常有用,并提供有用的信息
答案 6 :(得分:8)
如果您想要提取数千条记录,那么......有些人给出了使用“滚动”的正确答案。 (注意:有些人还建议使用" search_type = scan"。这已被弃用,并且已删除v5.0。您不需要它)
开始搜索'查询,但指定了一个'滚动'参数(此处我使用1分钟超时):
curl -XGET 'http://ip1:9200/myindex/_search?scroll=1m' -d '
{
"query": {
"match_all" : {}
}
}
'
这包括您的第一批'命中但我们没有在这里完成。上面curl命令的输出将是这样的:
{"_scroll_id":"c2Nhbjs1OzUyNjE6NU4tU3BrWi1UWkNIWVNBZW43bXV3Zzs1Mzc3OkhUQ0g3VGllU2FhemJVNlM5d2t0alE7NTI2Mjo1Ti1TcGtaLVRaQ0hZU0FlbjdtdXdnOzUzNzg6SFRDSDdUaWVTYWF6YlU2Uzl3a3RqUTs1MjYzOjVOLVNwa1otVFpDSFlTQWVuN211d2c7MTt0b3RhbF9oaXRzOjIyNjAxMzU3Ow==","took":109,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":22601357,"max_score":0.0,"hits":[]}}
将_scroll_id设置为下一步非常重要您应该运行以下命令:
curl -XGET 'localhost:9200/_search/scroll' -d'
{
"scroll" : "1m",
"scroll_id" : "c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1"
}
'
但是,传递scroll_id不是设计为手动完成的。最好的办法就是编写代码来完成它。例如在java中:
private TransportClient client = null;
private Settings settings = ImmutableSettings.settingsBuilder()
.put(CLUSTER_NAME,"cluster-test").build();
private SearchResponse scrollResp = null;
this.client = new TransportClient(settings);
this.client.addTransportAddress(new InetSocketTransportAddress("ip", port));
QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();
scrollResp = client.prepareSearch(index).setSearchType(SearchType.SCAN)
.setScroll(new TimeValue(60000))
.setQuery(queryBuilder)
.setSize(100).execute().actionGet();
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId())
.setScroll(new TimeValue(timeVal))
.execute()
.actionGet();
现在最后一个命令的LOOP使用SearchResponse来提取数据。
答案 7 :(得分:7)
如果您只是添加一些大号作为大小,Elasticsearch将会变得显着更慢,一种方法用于使所有文档都使用扫描和滚动ID。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html
答案 8 :(得分:7)
简单!您可以使用size
和from
参数!
http://localhost:9200/[your index name]/_search?size=1000&from=0
然后逐渐更改from
,直到获得所有数据。
答案 9 :(得分:6)
调整尺寸的最佳方法是在网址前面使用尺寸= 数字
Curl -XGET "http://localhost:9200/logstash-*/_search?size=50&pretty"
注意:可以在此大小中定义的最大值为10000.对于任何超过一万的值,它希望您使用滚动功能,这将最大限度地减少对性能的影响。
答案 10 :(得分:6)
如果数据集很小(例如1K条记录),则只需指定size
:
curl localhost:9200/foo_index/_search?size=1000
不需要match all query,因为它是隐式的。
如果您有一个中等大小的数据集(例如1M记录),则可能没有足够的内存来加载它,因此您需要使用scroll。
滚动就像是数据库中的光标。在Elasticsearch中,它会记住您离开的地方并保持相同的索引视图(即,阻止搜索者离开refresh,阻止segments from merging)。
在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文档),则需要并行化。可以通过sliced scroll完成。假设您要导出10个线程。第一个线程将发出这样的请求:
curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/test/_search?scroll=1m&size=100' -d '{
"slice": {
"id": 0,
"max": 10
}
}'
您将返回第一页和一个滚动ID,就像正常的滚动请求一样。除了获得数据的1/10之外,您将像使用普通滚动一样完全消耗它。
其他线程将执行相同的操作,只是id
将是1、2、3 ...
答案 11 :(得分:5)
How to configure maven project to deploy both snapshot and releases to Nexus?的尺寸强> = 1000&安培;漂亮= 1
您需要指定大小查询参数,因为默认值为10
答案 12 :(得分:5)
您可以使用_count
API获取size
参数的值:
http://localhost:9200/foo/_count?q=<your query>
返回{count:X, ...}
。提取价值&#39; X&#39;然后执行实际查询:
http://localhost:9200/foo/_search?q=<your query>&size=X
答案 13 :(得分:3)
尺寸参数会将显示的匹配数从默认值(10)增加到500.
http://localhost:9200/[indexName]/_search?pretty=true&size=500&q=*:*
逐步更改 以获取所有数据。
http://localhost:9200/[indexName]/_search?size=500&from=0
答案 14 :(得分:3)
对于Elasticsearch 6.x
请求:GET /foo/_search?pretty=true
回复:在命中 - >总计,给出文件的计数
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1001,
"max_score": 1,
"hits": [
{
答案 15 :(得分:2)
您实际上不需要将正文传递给 match_all
,可以通过对以下 URL 的 GET 请求来完成。这是最简单的形式。
http://localhost:9200/foo/_search
答案 16 :(得分:2)
使用kibana控制台和my_index作为索引来搜索以下内容。要求索引仅返回索引的4个字段,您还可以添加大小以指示索引希望返回多少文档。从ES 7.6开始,您应该使用_source而不是filter,它会更快地响应。
GET /address/_search
{
"_source": ["streetaddress","city","state","postcode"],
"size": 100,
"query":{
"match_all":{ }
}
}
答案 17 :(得分:2)
从Kibana DevTools获得:
GET my_index_name/_search
{
"query": {
"match_all": {}
}
}
答案 18 :(得分:2)
答案 19 :(得分:2)
默认情况下,Elasticsearch返回10条记录,因此应明确提供大小。
根据请求添加大小以获取所需的记录数。
http:// {host}:9200 / {index_name} / _search?pretty = true&size =(记录数)
注意: 最大页面大小不能超过index.max_result_window索引设置,该设置默认为10,000。
答案 20 :(得分:2)
curl -X GET 'localhost:9200/foo/_search?q=*&pretty'
答案 21 :(得分:0)
如果在某些用例中仍然有人在寻找像我这样从Elasticsearch检索的所有数据,这就是我所做的。而且,所有数据意味着所有索引和所有文档类型。我正在使用Elasticsearch 6.3
curl -X GET "localhost:9200/_search?pretty=true" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": {}
}
}
'
答案 22 :(得分:0)
除@Akira Sendoh以外,没有其他人回答了如何实际获取所有文档。但是,即使该解决方案也使我的 ES 6.3 服务崩溃而没有日志。使用低级install
库对我有用的唯一方法是通过使用elasticsearch-py
api的scan helper:
scroll()
但是,如今,更简洁的方法似乎是通过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
库,该库提供了更抽象,更简洁的调用,例如:http://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#hits
答案 23 :(得分:0)
elasticSearch通过提供大小将返回的最大结果为10000
curl -XGET 'localhost:9200/index/type/_search?scroll=1m' -d '
{
"size":10000,
"query" : {
"match_all" : {}
}
}'
在那之后,您必须使用Scroll API来获取结果并获取_scroll_id值,并将此值放入scroll_id
curl -XGET 'localhost:9200/_search/scroll' -d'
{
"scroll" : "1m",
"scroll_id" : ""
}'
答案 24 :(得分:0)
使用python软件包elasticsearch-dsl的简单解决方案:
from elasticsearch_dsl import Search
from elasticsearch_dsl import connections
connections.create_connection(hosts=['localhost'])
s = Search(index="foo")
response = s.scan()
count = 0
for hit in response:
# print(hit.to_dict()) # be careful, it will printout every hit in your index
count += 1
print(count)
另请参见https://elasticsearch-dsl.readthedocs.io/en/latest/api.html#elasticsearch_dsl.Search.scan。
答案 25 :(得分:0)
这是查询以完成您想要的, (我建议您使用Kibana,因为它有助于更好地理解查询)
GET my_index_name/my_type_name/_search
{
"query":{
"match_all":{}
},
size : 20,
from : 3
}
要获取所有记录,您必须使用“ match_all”查询。
size是您要获取的记录数(有限制)。 默认情况下,ES仅返回10条记录
from就像跳过,跳过前3条记录。
如果您要获取所有记录,只需使用“总计”字段中的值 一旦您从Kibana命中了此查询并将其与“ size”一起使用,便会从结果中获取数据。
答案 26 :(得分:0)
使用Elasticsearch 7.5.1
http://${HOST}:9200/${INDEX}/_search?pretty=true&q=*:*&scroll=10m&size=5000
如果您还可以使用&size = $ {number}
指定数组的大小如果您不知道自己编入索引
http://${HOST}:9200/_cat/indices?v
答案 27 :(得分:0)
curl -XGET '{{IP/localhost}}:9200/{{Index name}}/{{type}}/_search?scroll=10m&pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
}}'
答案 28 :(得分:0)
要返回所有索引中的所有记录,您可以执行以下操作:
curl -XGET http://35.195.120.21:9200/_all/_search?size=50&pretty
输出:
"took" : 866,
"timed_out" : false,
"_shards" : {
"total" : 25,
"successful" : 25,
"failed" : 0
},
"hits" : {
"total" : 512034694,
"max_score" : 1.0,
"hits" : [ {
"_index" : "grafana-dash",
"_type" : "dashboard",
"_id" : "test",
"_score" : 1.0,
...
答案 29 :(得分:-5)
你可以使用size = 0这将返回所有文件 示例
curl -XGET 'localhost:9200/index/type/_search' -d '
{
size:0,
"query" : {
"match_all" : {}
}
}'