下载、安装、工具
下载并加压:ElasticSearch,来自 how2j
中文分词器:http:///frontdownload?bean.id=1696
执行安装分词器:(从github安装)
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.2/elasticsearch-analysis-ik-6.2.2.zip
从本地安装:
cd 安装路径
elasticsearch-plugin install zip路径/elasticsearch-analysis-ik-6.2.2.zip
工具:kibana
搭建
SpringMvc部分参照文章:ssm maven 工程目录以及环境搭建
pom包:
<!--elasticsearch-rest-high-level-client --> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId>
工具类:
public class ElasticUtils { public static String indexName = "shose"; public static RestHighLevelClient client = new RestHighLevelClient( new HttpHost("localhost", 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()); 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); public static Map getDocument(String type,String id) throws IOException { // TODO Auto-generated method stub GetRequest request = new GetRequest( GetResponse response = client.get(request); if(!response.isExists()){ System.out.println("检查到服务器上 "+type+" id="+id+ "的文档不存在"); String source = response.getSourceAsString(); System.out.print("获取到服务器上 "+type+" id="+id+ "的文档内容是:"); System.out.println(source); return response.getSourceAsMap(); 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()) 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 { 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())) { System.out.println("索引:" +indexName + " 是存在的"); System.out.println("索引:" +indexName + " 不存在"); 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); // private static void batchInsert(List<Product> products) throws IOException { // // TODO Auto-generated method stub // BulkRequest request = new BulkRequest(); // for (Product product : products) { // Map<String,Object> m = product.toMap(); // IndexRequest indexRequest= new IndexRequest(indexName, "product", String.valueOf(product.getId())).source(m); // request.add(indexRequest); // System.out.println("批量插入完成"); public static String getIndexName() { public static void setIndexName(String indexName) { ElasticUtils.indexName = indexName; public static RestHighLevelClient getClient() { public static void setClient(RestHighLevelClient client) { ElasticUtils.client = client;
实体类:
Controller:
public class ElasticController { private ElasticService elasticService; @RequestMapping(value = "product",method = RequestMethod.POST) public Message addProduct( @RequestParam(name = "id")String id, @RequestParam(name = "name")String name, @RequestParam(name = "price")String price, @RequestParam(name = "detail")String detail){ return elasticService.addProduct(new Product(id,name,price,detail)); @RequestMapping(value = "product",method = RequestMethod.DELETE) public Message delProduct( @RequestParam(name = "id")String id){ return elasticService.delProduct(id); @RequestMapping(value = "product",method = RequestMethod.PUT) 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)); @RequestMapping(value = "product",method = RequestMethod.GET) 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){ return elasticService.getProduct(id); return elasticService.searchProduct(fieldName,name,start,count);
Service
public class ElasticServiceImpl implements ElasticService { public Message addProduct(Product product) { ElasticUtils.addDocument(product); } catch (IOException e) { return new Message("500",null); return new Message("200",null); public Message delProduct(String id) { Product product = new Product(); ElasticUtils.deleteDocument(product); } catch (IOException e) { return new Message("500",null); return new Message("200",null); public Message getProduct(String id) { return new Message("200",ElasticUtils.getDocument("product",id)); } catch (IOException e) { return new Message("500",null); public Message searchProduct(String fieldName,String keyword,int start,int count) { return new Message("200",ElasticUtils.search("product",fieldName,keyword,start,count)); } catch (IOException e) { return new Message("500",null); public Message updateProduct(Product product) { ElasticUtils.updateDocument(product); } catch (IOException e) { return new Message("500",null); return new Message("200",null);
测试
添加一个product:成功
通过id查询product类型的数据:成功
模糊搜索数据:
删除数据:
再次查询:没有匹配数据
更多功能有待测试
|