es 高效分页查询10万条数据 Java demo
时间: 2024-02-24 10:59:10 浏览: 23
这里提供一个基于 Elasticsearch 的 Java demo,可实现高效分页查询 10 万条数据:
```java
import org.apache.http.HttpHost;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ElasticsearchDemo {
public static void main(String[] args) throws IOException {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.from(0);
sourceBuilder.size(10000);
sourceBuilder.timeout(new TimeValue(60, TimeValue.Unit.SECONDS));
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices("your_index_name");
searchRequest.source(sourceBuilder);
client.searchAsync(searchRequest, new ActionListener<SearchResponse>() {
@Override
public void onResponse(SearchResponse searchResponse) {
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
// 处理查询结果
}
}
@Override
public void onFailure(Exception e) {
// 处理异常
}
});
client.close();
}
}
```
上述代码中,我们通过 Elasticsearch 的 Java 客户端 RestHighLevelClient 发起查询请求,设置查询条件为 `matchAllQuery()`,并设置查询结果的起始位置 `from` 和查询结果的数量 `size`,最后设置查询超时时间为 60 秒。
由于查询结果中可能包含大量数据,我们使用异步方式 `client.searchAsync()` 处理查询结果,并在回调函数中处理查询结果。
注意:在实际使用中,需要根据数据量和查询条件进行调整,以保证查询效率。