elasticsearch游标查询所有数据
程序员文章站
2022-03-02 18:12:49
...
在Elasticsearch中找一个复制索引的接口真难。现在官方唯一推荐的方法是使用游标获得被复制索引的所有document,然后使用bulkIndex新建立一个索引。
这个接口也很奇怪,第一次search竟然不返回数据。
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.Client; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.search.SearchHit; import donlian.es.ESUtils; /** * 使用scroll方法实现复制索引 * @author donlianli@126.com */ public class ScrollTest { public static void main(String[] args) { Client esClient = ESUtils.getClient(); SearchResponse searchResponse = esClient.prepareSearch(ESUtils.getIndexName()) //加上这个据说可以提高性能,但第一次却不返回结果 .setSearchType(SearchType.SCAN) //实际返回的数量为5*index的主分片格式 .setSize(5) //这个游标维持多长时间 .setScroll(TimeValue.timeValueMinutes(8)) .execute().actionGet(); //第一次查询,只返回数量和一个scrollId System.out.println(searchResponse.getHits().getTotalHits()); System.out.println(searchResponse.getHits().hits().length); //第一次运行没有结果 for (SearchHit hit : searchResponse.getHits()) { System.out.println(hit.getSourceAsString()); } System.out.println("------------------------------"); //使用上次的scrollId继续访问 searchResponse = esClient.prepareSearchScroll(searchResponse.getScrollId()) .setScroll(TimeValue.timeValueMinutes(8)) .execute().actionGet(); System.out.println(searchResponse.getHits().getTotalHits()); System.out.println(searchResponse.getHits().hits().length); for (SearchHit hit : searchResponse.getHits()) { System.out.println(hit.getSourceAsString()); } } }
对这类话题感兴趣?欢迎发送邮件至donlianli@126.com
关于我:邯郸人,擅长Java,Javascript,Extjs,oracle sql。
更多我之前的文章,可以访问 我的空间
推荐阅读
-
SQLSERVER查询所有数据库名,表名,和字段名的语句
-
Oracle生成查询包含指定字段名对应的所有数据表记录语句
-
央行科技司原副司长李晓枫:区块链中所有者有权增加和查询数据库
-
mysql查询近七天、近三十天、近年(按月份)的所有统计数据
-
打开一个jsp页面默认查询所有数据,调用action
-
Oracle查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名等实例教程
-
sql查询当前数据库的所有表名
-
ES 20 - 查询Elasticsearch中的数据 (基于DSL的查询, 包括validate、match、bool)
-
SQL SERVER查询数据库所有表的大小,按照记录数降序排列
-
Elasticsearch7.5 kibana _search 查询数据只返回10000条数据