# Elab-ES使用手册 ## 环境配置 ### 加载依赖 ```xml com.elab.core elab-es ${project.version} ``` ### 开启ES功能 SpringBoot的启动类上加入`@EnableESTools` 配置文件中加入 ```yml spring.elasticsearch.rest.uris=http://192.168.0.24:9200 ``` 如果有多个(集群情况)请用半角逗号```,```隔开 ### 索引映射 ```java import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.zxp.esclientrhl.annotation.ESMetaData; import java.io.Serializable; import java.util.Date; /** * 用户entity * * @author : liukx * @time : 2019/8/1 - 11:40 */ @ESMetaData(indexName = "索引名称", indexType = "类型名称", number_of_shards = 5, number_of_replicas = 0, printLog = true) public class UserTable implements Serializable { // 对应字段 private String doc_id; private String title; private String message; private Date postDate; private HighlightField highlightField; public HighlightField getHighlightField() { return highlightField; } public void setHighlightField(HighlightField highlightField) { this.highlightField = highlightField; } public String getDoc_id() { return doc_id; } public void setDoc_id(String doc_id) { this.doc_id = doc_id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Date getPostDate() { return postDate; } public void setPostDate(Date postDate) { this.postDate = postDate; } @Override public String toString() { return "UserTable{" + "doc_id='" + doc_id + '\'' + ", title='" + title + '\'' + ", message='" + message + '\'' + ", postDate=" + postDate + ", highlightField=" + highlightField + '}'; } } ``` `indexName` : 类似于Mysql的数据库名称 `indexType`: 类似于Mysql的表名称 `printLog` : 是否打印日志,这个东西会将请求的参数转换成ES的文档搜索查询字符串打印出来 ### 业务中使用 加入模版操作类 ```java @Autowired DefaultElasticSearchTemplate elasticsearchTemplate; ``` 这里是引入ES操作的模版类。 **Main2** : 映射ES的实体类 String : 主键 ```java @ESMetaData(indexName = "index",indexType = "main", number_of_shards = 5,number_of_replicas = 0) public class Main2 implements Serializable { private static final long serialVersionUID = 1L; @ESID private String proposal_no; ``` #### 新增数据 ```java Main2 main = new Main2(); main.setProposal_no("main2"); main.setAppli_code("123"); main.setAppli_name("456"); elasticsearchTemplate.save(main); ``` #### 批量新增数据 ```java List list = new ArrayList<>(); Main2 main1 = new Main2(); main1.setProposal_no("main1"); main1.setAppli_code("123"); main1.setAppli_name("456"); Main2 main2 = new Main2(); main2.setProposal_no("main2"); main2.setAppli_code("123"); main2.setAppli_name("456"); Main2 main3 = new Main2(); main3.setProposal_no("main3"); main3.setAppli_code("123"); main3.setAppli_name("456"); list.add(main1); list.add(main2); list.add(main3); elasticsearchTemplate.save(list); ``` #### 部分更新索引数据 ```java Main2 main1 = new Main2(); main1.setProposal_no("main1"); main1.setInsured_code("123"); elasticsearchTemplate.update(main1); ``` #### 判断索引是否存在 ```java Main2 main1 = new Main2(); main1.setProposal_no("main1"); main1.setInsured_code("123"); boolean exists = elasticsearchTemplate.exists("main1",Main2.class); System.out.println(exists); ``` 原生查询 #### 原生查询 searchRequest是官方原生查询输入,此方法在工具无法满足需求时使用 ```java SearchRequest searchRequest = new SearchRequest(new String[]{"index"}); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(new MatchAllQueryBuilder()); searchSourceBuilder.from(0); searchSourceBuilder.size(10); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = elasticsearchTemplate.search(searchRequest); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits) { Main2 t = JsonUtils.string2Obj(hit.getSourceAsString(), Main2.class); System.out.println(t); } ``` #### 高级查询 [参考文档](https://gitee.com/zxporz/ESClientRHL) #### 高亮查询