elasticsearch 使用scroll_id查询,为什么每次查询结果相同
来源:互联网 发布:h5房卡麻将源码 编辑:程序博客网 时间:2024/06/06 01:27
使用elasticsearch 2.4 版本,想分页遍历所有的文档,因为 from + size 有范围限制,且效率低下,因此采用 scroll,代码如下,结果每次打印出来的数据一模一样,但是scroll_id 的值是最新的
public static void main(String[] args) {
try {
String url = "http://ip:port/index/type/_search";
String oldEsResult = sendGet(url, "scroll=20s&search_type=scan&size=10");
ObjectMapper mapper1 = new ObjectMapper();
String scroll_id;
int totalCount = NumberUtils.toInt(mapper1.readTree(oldEsResult).findValue("hits").findValue("total").toString());
scroll_id = mapper1.readTree(oldEsResult).findValue("_scroll_id").toString();
System.out.println("totalCount is-------" + totalCount);
int size = 100;
int numbers = totalCount / size; //页数
String params = "scroll=20s&scroll_id=";
for(int i = 0; i < numbers; i++){
String param = params + scroll_id;
oldEsResult = sendGet(url, param);
if(StringUtils.isBlank(oldEsResult)){
continue;
}
ObjectMapper mapper2 = new ObjectMapper();
scroll_id = mapper2.readTree(oldEsResult).findValue("_scroll_id").toString();
JsonNode node = mapper2.readTree(oldEsResult).findValue("hits").findValue("hits");
for (int j = 0; j < node.size(); j++) {
System.out.println(node.get(j).get("_source"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
- elasticsearch 使用scroll_id查询,为什么每次查询结果相同
- mysql排序字段相同每次查询出的来结果都不一样
- Elasticsearch 查询使用
- 使用SQL查询Elasticsearch
- ElasticSearch查询的使用
- ElasticSearch读取查询结果(search)
- elasticsearch如何获得查询的全部结果
- elasticsearch查询结果中实体类处理
- ElasticSearch使用教程四(ElasticSearch查询详解)
- ElasticSearch使用教程四(ElasticSearch查询详解)
- elasticsearch-查询
- Elasticsearch查询
- Elasticsearch查询
- ElasticSearch查询
- Elasticsearch 查询
- 为什么查询结果总为空?
- ibatis开发查询结果为动态列,多次查询结果相同
- mysql在做每次子查询时是否会缓存上次子查询的结果?
- android Canvas参考
- cocos2dx package.loaded
- 排序算法(四)冒泡排序及其优化
- 设置字符编码
- java程序导出jar、生成exe、生成安装包
- elasticsearch 使用scroll_id查询,为什么每次查询结果相同
- volatile关键字
- Linux内核配置选项
- 安装maven
- C#实现任意源组播与特定源组播
- linux常用命令精粹
- 怎么样才能进入BAT公司的研发部门
- postgresql json查询出来的数据多出来一个双引号的问题
- linux文件系统的系统分析--(一)vfs和数据结构