1.导入包
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.4.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.4.2</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.39</version>
</dependency>
2.配置es连接配置类
package com.http.config;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.InetAddress;
import java.net.UnknownHostException;
@Configuration
public class ElasticSearchConfig {
@Bean
public static TransportClient getConnection() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();
TransportClient client= new PreBuiltTransportClient(settings).addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));
return client;
}
}
3.实现controller
package com.http.controller;
/*
* @author allen
* @version v1.0
*/
import com.alibaba.fastjson.JSON;
import com.http.entity.ShopInfo;
import org.elasticsearch.action.ActionFuture;
import org.elasticsearch.action.delete.DeleteRequestBuilder;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutionException;
@RestController
public class EsController {
@Autowired
TransportClient transportClient;
/**
* 根据id查询
* @return
*/
@RequestMapping("/getData")
public String getData(){
GetRequestBuilder getRequestBuilder = transportClient.prepareGet("shop", "shop", "52BEEC87048F4489B8A5F370E0EAD2FB");
String sourceAsString = getRequestBuilder.get().getSourceAsString();
return sourceAsString;
}
/**
* 添加
* @return
*/
@RequestMapping("/saveData")
public IndexResponse saveData(){
ShopInfo shopInfo=new ShopInfo();
shopInfo.setTitle("dsds");
shopInfo.setSrc("src");
IndexResponse indexResponse = transportClient.prepareIndex("book", "user", "1").setSource(JSON.toJSONString(shopInfo), XContentType.JSON).get();
return indexResponse;
}
/**
* 修改
* @return
*/
@RequestMapping("/updateData")
public IndexResponse updateData(){
ShopInfo shopInfo=new ShopInfo();
shopInfo.setSrc("cs");
//book是索引 user是类型 1是修改的id
IndexResponse indexResponse = transportClient.prepareIndex("book", "user", "1").setSource(JSON.toJSONString(shopInfo), XContentType.JSON).get();
return indexResponse;
}
/**
* 删除
* @return
*/
@RequestMapping("/deleteData")
public DeleteResponse deleteData(){
DeleteRequestBuilder deleteRequestBuilder = transportClient.prepareDelete("book", "user", "1");
DeleteResponse deleteResponse = deleteRequestBuilder.get();
return deleteResponse;
}
/**
根据标题模糊查询
* 高亮显示查询
分页查询
排序
*
* @return
*/
@RequestMapping("/getDataAll")
public List<Map<String,Object>> getDataAll() throws ExecutionException, InterruptedException {
List<Map<String,Object>> maps=new CopyOnWriteArrayList<>();
SearchRequest searchRequest=new SearchRequest("shop");
SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
searchRequest.source(searchSourceBuilder);
//查询条件title
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "阅读");
//设置高亮内容
HighlightBuilder highlightBuilder=new HighlightBuilder();
highlightBuilder.preTags("<p style='color:red;'>");
highlightBuilder.postTags("<p/>");
highlightBuilder.field("title");
searchSourceBuilder.highlighter(highlightBuilder);
searchSourceBuilder.query(matchQueryBuilder);
//从那开始显示
searchSourceBuilder.from(0);
//每页显示几条
searchSourceBuilder.size(2);
//排序
searchSourceBuilder.sort("_score", SortOrder.DESC);
ActionFuture<SearchResponse> search = transportClient.search(searchRequest);
SearchHits hits = search.get().getHits();
SearchHit[] hits1 = hits.getHits();
//循环遍历数据,并设置高亮字段
for (SearchHit hit:hits1){
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
String str="";
if(highlightFields!=null){
Text[] titles = highlightFields.get("title").fragments();
for (Text text:titles){
System.out.println(text);
str+=text;
}
}
sourceAsMap.put("title",str);
maps.add(sourceAsMap);
}
return maps;
}
}