ssm项目实现elasticsearch 简单整合
·
pom.xml
<!--elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
实体类
package com.mlwy.elastic.pojo;
public class Product {
private String id;
private String name;
private String price;
private String detail;
public Product(){}
public Product(String id, String name, String price, String detail){
this.id = id;
this.detail = detail;
this.name = name;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
}
结果集
package com.mlwy.elastic.pojo;
import java.util.Map;
public class Message {
public String name;
public Object msg;
Message(){}
public Message(String name, Object msg){
this.msg = msg;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Object getMsg() {
return msg;
}
public void setMsg(Object msg) {
this.msg = msg;
}
}
elasticsearch工具类
package com.mlwy.elastic.util;
import com.mlwy.elastic.pojo.Product;
import org.apache.http.HttpHost;
import org.elasticsearch.ElasticsearchStatusException;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.open.OpenIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.ScoreSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* es搜索工具类
* @author chenchbj
*/
public class ElasticUtils {
// 相当于数据库名称(数据量小)
public static String indexName = "mlwybj";
// 初始化api客户端
public static RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("10.4.0.43", 9200, "http")
));
// 关键字搜索 指定匹配类型
public static List<Map<String, Object>> search(String type, String fieldName, String keyword, int start, int count) throws IOException {
SearchRequest searchRequest = new SearchRequest(indexName);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//关键字匹配对应字段
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder(fieldName, keyword);
//模糊匹配
matchQueryBuilder.fuzziness(Fuzziness.AUTO);
sourceBuilder.query(matchQueryBuilder);
//第几页
sourceBuilder.from(start);
//第几条
sourceBuilder.size(count);
searchRequest.source(sourceBuilder);
searchRequest.types(type);
//匹配度从高到低
sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
SearchResponse searchResponse = client.search(searchRequest);
SearchHits hits = searchResponse.getHits();
List<Map<String, Object>> matchRsult = new LinkedList<Map<String, Object>>();
for (SearchHit hit : hits.getHits())
{
matchRsult.add(hit.getSourceAsMap());
}
return matchRsult;
}
//删除指定类型
public static void deleteDocument(Object object) throws IOException {
if(object instanceof Product){
DeleteRequest deleteRequest = new DeleteRequest (indexName,"product", ((Product) object).getId());
System.out.println("已经从ElasticSearch服务器上删除id="+((Product) object).getId()+"的product文档");
client.delete(deleteRequest);
}
}
// 获得指定type指定id的数据 json
public static Map getDocument(String type,String id) throws IOException {
// TODO Auto-generated method stub
GetRequest request = new GetRequest(
indexName,
type,
id);
GetResponse response = client.get(request);
if(!response.isExists()){
System.out.println("检查到服务器上 "+type+" id="+id+ "的文档不存在");
return null;
}
else{
String source = response.getSourceAsString();
System.out.print("获取到服务器上 "+type+" id="+id+ "的文档内容是:");
System.out.println(source);
return response.getSourceAsMap();
}
}
// 插入指定type,数据
public static void addDocument(Object object) throws IOException {
Map<String, Object> jsonMap = new HashMap<>();
if(object instanceof Product){
jsonMap.put("id", ((Product)object).getId());
jsonMap.put("name", ((Product)object).getName());
jsonMap.put("price", ((Product)object).getPrice());
jsonMap.put("detail", ((Product)object).getDetail());
IndexRequest indexRequest = new IndexRequest(indexName, "product", ((Product)object).getId())
.source(jsonMap);
client.index(indexRequest);
System.out.println("已经向ElasticSearch服务器增加Product:"+object);
}
}
// 更新数据
public static void updateDocument(Object object) throws IOException {
if(object instanceof Product){
UpdateRequest updateRequest = new UpdateRequest (indexName, "product", ((Product) object).getId())
.doc("name",((Product) object).getId())
.doc("price",((Product) object).getPrice())
.doc("detail",((Product) object).getDetail());
client.update(updateRequest);
System.out.println("已经在ElasticSearch服务器修改产品为:"+object);
}
}
private static boolean checkExistIndex(String indexName) throws IOException {
boolean result =true;
try {
OpenIndexRequest openIndexRequest = new OpenIndexRequest(indexName);
client.indices().open(openIndexRequest).isAcknowledged();
} catch (ElasticsearchStatusException ex) {
String m = "Elasticsearch exception [type=index_not_found_exception, reason=no such index]";
if (m.equals(ex.getMessage())) {
result = false;
}
}
if(result){
System.out.println("索引:" +indexName + " 是存在的");
}else{
System.out.println("索引:" +indexName + " 不存在");
}
return result;
}
private static void deleteIndex(String indexName) throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest(indexName);
client.indices().delete(request);
System.out.println("删除了索引:"+indexName);
}
private static void createIndex(String indexName) throws IOException {
// TODO Auto-generated method stub
CreateIndexRequest request = new CreateIndexRequest(indexName);
client.indices().create(request);
System.out.println("创建了索引:"+indexName);
}
public static String getIndexName() {
return indexName;
}
public static void setIndexName(String indexName) {
ElasticUtils.indexName = indexName;
}
public static RestHighLevelClient getClient() {
return client;
}
public static void setClient(RestHighLevelClient client) {
ElasticUtils.client = client;
}
}
service
package com.mlwy.service.elastic;
import com.mlwy.elastic.pojo.Message;
import com.mlwy.elastic.pojo.Product;
public interface ElasticService {
Message addProduct(Product product);
Message delProduct(String id);
Message getProduct(String id);
Message searchProduct(String fieldName, String keyword, int start, int count);
Message updateProduct(Product product);
}
package com.mlwy.service.elastic.impl;
import com.mlwy.elastic.pojo.Message;
import com.mlwy.elastic.pojo.Product;
import com.mlwy.elastic.util.ElasticUtils;
import com.mlwy.service.elastic.ElasticService;
import org.springframework.stereotype.Service;
import java.io.IOException;
/**
* @author chenchbj
*/
@Service
public class ElasticServiceImpl implements ElasticService {
@Override
public Message addProduct(Product product) {
try {
ElasticUtils.addDocument(product);
} catch (IOException e) {
e.printStackTrace();
return new Message("500",null);
}
return new Message("200",null);
}
@Override
public Message delProduct(String id) {
Product product = new Product();
product.setId(id);
try {
ElasticUtils.deleteDocument(product);
} catch (IOException e) {
e.printStackTrace();
return new Message("500",null);
}
return new Message("200",null);
}
@Override
public Message getProduct(String id) {
try {
return new Message("200",ElasticUtils.getDocument("product",id));
} catch (IOException e) {
e.printStackTrace();
return new Message("500",null);
}
}
@Override
public Message searchProduct(String fieldName,String keyword,int start,int count) {
try {
return new Message("200",ElasticUtils.search("product",fieldName,keyword,start,count));
} catch (IOException e) {
e.printStackTrace();
return new Message("500",null);
}
}
@Override
public Message updateProduct(Product product) {
try {
ElasticUtils.updateDocument(product);
} catch (IOException e) {
e.printStackTrace();
return new Message("500",null);
}
return new Message("200",null);
}
}
controller
package com.mlwy.controller.elastic;
import com.mlwy.elastic.pojo.Message;
import com.mlwy.elastic.pojo.Product;
import com.mlwy.service.elastic.ElasticService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* elasticsearch搜索
* 20210508
* @author chenchbj
*/
@Controller
@RequestMapping("/es")
public class ElasticController {
@Autowired
private ElasticService elasticService;
/**
* http://10.4.0.93:8081/mlwybj/es/addDetail.html?id=3&name=%E4%B8%80%E5%8A%A0%E6%89%8B%E6%9C%BA&price=6799&detail=%E4%B8%80%E5%8A%A0%E6%89%8B%E6%9C%BA%E5%A5%BD%E7%9C%8B%EF%BC%8Cqingos%E7%B3%BB%E7%BB%9F%E5%A5%BD
* 添加
*/
@RequestMapping("/addDetail")
@ResponseBody
public Message addProduct(Product vo){
return elasticService.addProduct(vo);
}
@RequestMapping(value = "delProduct")
@ResponseBody
public Message delProduct(
@RequestParam(name = "id")String id){
return elasticService.delProduct(id);
}
@RequestMapping(value = "updateProduct",method = RequestMethod.PUT)
@ResponseBody
public Message updateProduct(
@RequestParam(name = "id")String id,
@RequestParam(name = "name")String name,
@RequestParam(name = "price")String price,
@RequestParam(name = "detail")String detail){
return elasticService.updateProduct(new Product(id,name,price,detail));
}
/**
* http://10.4.0.93:8081/mlwybj/es/searchProduct.html?fieldName=name&name=%E6%89%8B%E6%9C%BA&start=0&count=10
* @param fieldName 查询类型 比如 name detail price
* @param name 关键字
* @param start 开始
* @param count
* @param id 可以不传
* http://10.4.0.93:8081/mlwybj/es/searchProduct.html?fieldName=name&name=%E6%89%8B%E6%9C%BA&start=0&count=4&id=3
*
*http://10.4.0.93:8081/mlwybj/es/searchProduct.html?fieldName=detail&name=%E7%BD%97%E6%B0%B8%E6%B5%A9&start=0&count=10
http://10.4.0.93:8081/mlwybj/es/searchProduct.html?fieldName=price&name=4799&start=0&count=10
* @return
*/
@RequestMapping(value = "searchProduct",method = RequestMethod.GET)
@ResponseBody
public Message searchProduct(
@RequestParam(name = "fieldName",required = false)String fieldName,
@RequestParam(name = "name",required = false)String name,
@RequestParam(name = "start",required = false)Integer start,
@RequestParam(name = "count",required = false)Integer count,
@RequestParam(name = "id",required = false)String id){
if(id != null){
return elasticService.getProduct(id);
}else {
return elasticService.searchProduct(fieldName,name,start,count);
}
}
}



最后一个图是查看elasticsearch是否启动成功。
更多推荐
所有评论(0)