1.安装7.6.2的es
访问地址+端口显示如下表示安装成功。
2.加入maven依赖,在properties中制定版本号
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<elasticsearch.version>7.6.2</elasticsearch.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3.创建es的连接配置类
@Configuration
public class ElasticsearchConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client= new RestHighLevelClient(
RestClient.builder(new HttpHost("***",9200,"http")));
return client;
}
}
4.一些简单的es操作测试
注解注入es类
@Autowired
private RestHighLevelClient restHighLevelClient;
- 添加索引值
@Test
void testIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("d_index");
CreateIndexResponse createIndexResponse= restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
}
- 判断索引是否添加成功,返回true代表存在索引。
@Test
void testExitIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest("d_index");
boolean exits=
restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exits);
}
- 删除索引
@Test
void testdelIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("d_index");
AcknowledgedResponse delete =restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete.isAcknowledged());
}
- 添加文档内容
@Test
void testAddDocument() throws IOException{
User user=new User();
user.setUserBean("123");
user.setUserId(123);
IndexRequest request=new IndexRequest("d_index");
request.id("1");
request.timeout(TimeValue.timeValueSeconds(2));
request.source(JSON.toJSONString(user), XContentType.JSON);
IndexResponse indexResponse =restHighLevelClient.index(request,RequestOptions.DEFAULT);
System.out.println(indexResponse.toString());
}
返回为代表成功IndexResponse[index=d_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={“total”:2,“successful”:1,“failed”:0}]
- 更新文档内容
@Test
void updateGetDocument() throws IOException{
UpdateRequest updateRequest = new UpdateRequest("d_index","1");
updateRequest.timeout("1s");
User user=new User();
user.setUserBean("456");
updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse updateResponse = restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
System.out.println(updateResponse.status());
}
返回ok代表成功
- 删除文档内容
@Test
void deleteGetDocument() throws IOException{
DeleteRequest request = new DeleteRequest("d_index","1");
request.timeout("1s");
DeleteResponse deleteResponse = restHighLevelClient.delete(request,RequestOptions.DEFAULT);
System.out.println(deleteResponse.status());
}
- 批量插入数据
@Test
void testbulkRequest() throws IOException {
BulkRequest bulkRequest=new BulkRequest();
bulkRequest.timeout("10s");
List<User> list=userMapper.selectAllUser();
for (int i=0;i<list.size();i++){
bulkRequest
.add(new IndexRequest("d_index")
.id(""+(i+1))
.source(JSON.toJSONString(list.get(i)),XContentType.JSON));
}
BulkResponse bulkResponse =restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);//返回false表示成功插入
System.out.println(bulkResponse.hasFailures());
}
- 创建搜索条件
//创建索引
SearchRequest searchRequest= new SearchRequest("d_index");
SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
//设置分页效果,表示0到10条记录
searchSourceBuilder.from(0);
searchSourceBuilder.size(10);
// 精准查询
TermQueryBuilder termQueryBuilder=QueryBuilders.termQuery("字段1",searchContent);
TermQueryBuilder termQueryBuilder1= QueryBuilders.termQuery("字段2",searchContent);
BoolQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(termQueryBuilder1).should(termQueryBuilder);
//分词查询,该模式需要插入ik分词词才能达到更好的分词效果,否则使用es自带的分词器
MatchQueryBuilder matchQueryBuilder=QueryBuilders.matchQuery("字段1",searchContent);
MatchQueryBuilder matchQueryBuilder1=QueryBuilders.matchQuery("字段2",searchContent);
MatchQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(matchQueryBuilder).should(matchQueryBuilder1);
//词语匹配模式
MatchPhraseQueryBuilder matchPhraseQueryBuilder=QueryBuilders.matchPhraseQuery("bookName",searchContent);
MatchPhraseQueryBuilder matchPhraseQueryBuilder1=QueryBuilders.matchPhraseQuery("bookAuthor",searchContent);
MatchPhraseQueryBuilder matchPhraseQueryBuilde2=QueryBuilders.matchPhraseQuery("bookIntro",searchContent);
BoolQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(matchPhraseQueryBuilder).should(matchPhraseQueryBuilder1).should(matchPhraseQueryBuilde2);
//最后执行,即可得出最后的运行效果
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.timeout(new TimeValue(1000));
searchRequest.source(searchSourceBuilder);
SearchResponse response= restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
//计算得出的总数
long count = response.getHits().getTotalHits().value;
System.out.println(JSON.toJSONString(response.getHits()));
System.out.println("===========");
for (SearchHit searchHit:response.getHits().getHits()){
System.out.println(searchHit.getSourceAsMap());
}
9.设置高亮显示(已我项目上的两个实体类上字段为例)
// 高亮设置
// 在上一步searchRequest.source(searchSourceBuilder);前加入
HighlightBuilder highlightBuilder =new HighlightBuilder();
// 需要高亮的字段
highlightBuilder.field("bookName");
highlightBuilder.field("bookAuthor");
highlightBuilder.preTags("<span style='color:red;'>");
highlightBuilder.postTags("</span>");
highlightBuilder.requireFieldMatch(false);
searchSourceBuilder.highlighter(highlightBuilder);
// 在上一步后面加上
Map<String, HighlightField> highlightFields =searchHit.getHighlightFields();
Map<String,Object> sourceMap = searchHit.getSourceAsMap();//原来的结果
HighlightField bookName = highlightFields.get("bookName");
if (bookName!=null){
Text[] fragments=bookName.fragments();
String n_Name = "";
for (Text text:fragments){
n_Name+=text;
}
sourceMap.put("bookName",n_Name);
}
HighlightField bookAuthor = highlightFields.get("bookAuthor");
if (bookAuthor!=null){
Text[] fragments=bookAuthor.fragments();
String n_Name = "";
for (Text text:fragments){
n_Name+=text;
}
sourceMap.put("bookAuthor",n_Name);
}
BookInfoRes bookInfoRes= JSON.parseObject(JSON.toJSONString(sourceMap),BookInfoRes.class);
list.add(bookInfoRes);
}
10.最后的list就是你得到的数据将其返回给前端即可。大致的es操作就完成了。
es的学习上我是参考了狂神说,学习之中稍微记录了下笔记,详细学习的推荐去看下哔站的狂神说这部分。