刚开始用的elasticsearch-6.4.2版本,经常掉线。不到几小时,服务就停止了。导致需要经常上服务器启动服务。郁闷。
更换了新的版本7.3.1.
发现原来用的jest客户端,也不能查询数据了。因为新版本的ElasticSearch返回的数据格式和旧的不一样。
于是找新的java客户端。
(1)服务器端。
服务端,单节点。操作步骤参考官方。 我是下载的压缩文件。
https://www.elastic.co/guide/en/elasticsearch/reference/7.3/install-elasticsearch.html
配置:
node.name: node-1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9201
cluster.initial_master_nodes: ["node-1"]
xpack.ml.enabled: false
(2)客户端
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.3.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.3.1</version>
</dependency>
参考https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html
RestHighLevelClient client;
client = new RestHighLevelClient(RestClient.builder(new HttpHost("XXXX", 9201, "http")));
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder query = QueryBuilders.termQuery("type", "user");
QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("content", "地方");
sourceBuilder.query(query).query(matchQueryBuilder);
sourceBuilder.from(0);
sourceBuilder.size(5);
SearchRequest searchRequest = new SearchRequest();
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
RestStatus status = searchResponse.status();
log.info(status);
SearchHits hits = searchResponse.getHits();
// log.info(hits);
TotalHits totalHits = hits.getTotalHits();
log.info(totalHits);
long numHits = totalHits.value;
log.info(numHits);
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
// String index = hit.getIndex();
String id = hit.getId();
System.out.println(id);
float score = hit.getScore();
System.out.println(score);
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
System.out.println(sourceAsMap);
}
client.close();