使用jestClient查询ES常见问题
使用JestClient快速查询ES
众所周知,ES提供连接的方法有两种,一种是HTTP请求方式,一种是TCP/IP方式,ES对这两种方式提供了不同的接口,可以在ES的配置文件中查看详细端口号,在此不在赘述。
现在微服务的全家桶来说,基于spring boot和spring cloud很多情况下需要使用ES中间件进行存储一些数据或者是实现一些功能,比如分词、改造队列等等。所以spring也有相应的spring-data-ElasticSeach组件包连接ES进行相应的操作,其底层是使用了TCP/IP进行连接的,因为ES之后的版本TCP/IP的连接方式将不再支持,所以我们对新版本的ES使用JestClient进行连接。
开始我们的查询旅途吧~
首先加入我们的jestClient和ES的依赖
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>5.3.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.3.2</version>
</dependency>
指定我们的ES服务地址,当然是http连接的端口地址
spring.elasticsearch.jest.uris=http://127.0.0.1:9200
接下来我们写一个简单精确查询的例子,注意如果是要查询英文,所传入的值应该做小写处理,不然搜不到
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Search;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
public class test {
@Autowired
JestClient jestClient;
public void seach() throws IOException {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("字段名","123"));
Search search =new Search.Builder(searchSourceBuilder.toString()).addIndex("索引名").addType("type名").build();
JestResult jestResult = jestClient.execute(search);
}
}
然后使用jestResult获取各种你想要的查询值
要想改变搜索条件,那么参考下面的方法
模糊搜索,*为通配符
public void seach() throws IOException {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceB