介绍
ES作为一个搜索工具,寄托于Lucene之上,提供了方便的数据存储和搜索服务,一般的用它来作为网页数据索引以及存储用户画像(即用户标签)数据,可以提供复具有复杂的查询条件的服务。例如在网页索引中,通过倒排的方式索引的方式,对文档进行分词存储,可以很快的定位关键字所在的文档,从而达到毫秒级的搜索效率;而在用户画像存储中,ES既可以作为标签宽表,提供类似HIVE宽表的特性,又可以达到传统关系型数据库或者HBase的实时查询的要求,所以在一般的用户画像存储中也是不二之选。
2.引入依赖
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
3.配置客户端进行连接
package ;
import ;
import ;
import ;
import ;
import ;
@Configuration
public class RestClientConfig {
//配置RestHighLevelClient依赖到spring容器中待用
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
(
//绑定本机,端口,协议,如果是ES集群,就配置多个
new HttpHost("127.0.0.1",9200,"http")));
return client;
}
}
4.编写接口并实现分页查询
@ApiOperation("ES快搜")
@GetMapping("/wen")
public Result<Map<String,Object>> getProblemList(@RequestParam(value = "wenti") String wenti,
@RequestParam(value = "pageNo",required = false) Integer pageNo,
@RequestParam(value = "pageSize") Integer pageSize) throws IOException {
SearchRequest searchRequest = new SearchRequest("problem");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
(("wenti", wenti).analyzer("ik_max_word"));
//过滤查询
String[] excludes = {};
String[] includes = {"wenti","lab","id"};
(includes, excludes);
(pageNo);
(pageSize);
(searchSourceBuilder);
SearchResponse response = (searchRequest,);
SearchHits hits = ();
List<Problem> problemList=new ArrayList<>();
Map<String,Object> data = new HashMap<>();
for (SearchHit hit : hits) {
(((),));
(());
}
("total",());
("rows",problemList);
return (data);
}