文章目录
 - 1.基本概念
 -  
 - 2.HTTP使用
 - 1.创建索引(相当于创建数据库)
 - 2.索引-查询 & 删除
 -  
 - 3.创建文档
 - 1.创建文档(不指定id)
 - 2.创建文档(指定id)
 
 - 4.文档-查询 & 查询全部
 -  
 - 5.文档-修改 & 删除
 -  
 - 6.ES高级查询
 - 1.条件查询
 - 2.条件查询(请求体方式)
 - 3.分页查询(查询第二页的数据)
 - 4.分页查询只显示指定字段数据
 - 5.分页查询对查询出的结果进行排序
 - 6.多条件查询
 - 1.must(相当于and)
 - 2.should(相当于or)
 - 3.范围查询价格大于3999
 
 - 7.完全匹配(match是使用的分词加倒排索引相当于模糊查询)
 - 8.高亮
 - 9.分组统计
 - 10.求所有价格的平均值
 - 11.映射关系
 -  
 
 
 
 - 3.Java API
 - 1.环境搭建
 - 1.创建项目
 - 2.引入依赖
 - 3.测试连接
 - 4.封装ES连接工具类
 
 - 2.索引操作
 -  
 - 3.文档操作
 - 1.添加文档
 -  
 - 2.修改文档
 -  
 - 3.查询文档
 - 4.删除文档
 - 5.批量新增
 - 6.批量删除
 
 - 4.高级查询
 - 1.全量查询
 - 2.分页查询
 - 3.排序查询
 - 4.过滤字段
 - 5.组合查询
 - 6.高亮查询
 - 7.聚合查询
 
 
 
 
 
 
  
 
1.基本概念
 
1.数据格式
 

 

 
2.倒排索引
 

 
2.HTTP使用
 
1.创建索引(相当于创建数据库)
 

 
2.索引-查询 & 删除
 
1.查询索引
 

 
2.查询所有索引
 

 
3.删除索引
 

 
3.创建文档
 
1.创建文档(不指定id)
 

 
2.创建文档(指定id)
 

 
4.文档-查询 & 查询全部
 
1.根据id查询文档
 

 
2.查询索引下的所有文档
 

 
5.文档-修改 & 删除
 
1.全量修改
 

 
2.局部修改
 

 
3.删除文档
 

 
6.ES高级查询
 
1.条件查询
 

 
2.条件查询(请求体方式)
 

 
3.分页查询(查询第二页的数据)
 

 
4.分页查询只显示指定字段数据
 

 
5.分页查询对查询出的结果进行排序
 

 
6.多条件查询
 
1.must(相当于and)
 

 
2.should(相当于or)
 

 
3.范围查询价格大于3999
 

 
7.完全匹配(match是使用的分词加倒排索引相当于模糊查询)
 

 
8.高亮
 

 
9.分组统计
 

 
10.求所有价格的平均值
 

 
11.映射关系
 
1.创建索引 user
 

 
2.给索引创建映射关系
 

 

 
3.Java API
 
1.环境搭建
 
1.创建项目
 

 
2.引入依赖
 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sunxiansheng</groupId><artifactId>es-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.8.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency></dependencies>
</project>
 
3.测试连接
 
package com.sunxiansheng.es;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
public class ESTest {public static void main(String[] args) {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("152.136.40.209", 9200, "http")));try {client.close();} catch (Exception e) {e.printStackTrace();}}
}
 
4.封装ES连接工具类
 
package com.sunxiansheng.es;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;import java.util.function.Consumer;
public class EsUtil {public static void es(Consumer<RestHighLevelClient> consumer) {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("152.136.40.209", 9200, "http")));consumer.accept(client);try {client.close();} catch (Exception e) {e.printStackTrace();}}
}
 
2.索引操作
 
1.创建索引
 
1.代码
 
package com.sunxiansheng.es;import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;import java.io.IOException;
public class Index {public static void main(String[] args) {EsUtil.es((esClient) -> {CreateIndexRequest request = new CreateIndexRequest("user");try {CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);if (createIndexResponse.isAcknowledged()) {System.out.println("创建索引成功");} else {System.out.println("创建索引失败");}} catch (IOException e) {throw new RuntimeException(e);}});}
}
 
2.结果
 

 
2.查询索引
 
    @Testpublic void getIndex() {EsUtil.es((esClient) -> {GetIndexRequest request = new GetIndexRequest("user");try {GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);System.out.println(getIndexResponse.getAliases());System.out.println(getIndexResponse.getMappings());System.out.println(getIndexResponse.getSettings());} catch (IOException e) {throw new RuntimeException(e);}});}
 
3.删除索引
 
    @Testpublic void deleteIndex() {EsUtil.es((esClient) -> {try {AcknowledgedResponse acknowledgedResponse = esClient.indices().delete(new DeleteIndexRequest("user"), RequestOptions.DEFAULT);if (acknowledgedResponse.isAcknowledged()) {System.out.println("删除索引成功");} else {System.out.println("删除索引失败");}} catch (IOException e) {throw new RuntimeException(e);}});}
 
3.文档操作
 
1.添加文档
 
1.实体类
 
package com.sunxiansheng.entity;import lombok.Data;
@Data
public class User {private String name;private Integer age;private String sex;
}
 
2.代码
 
    @Testpublic void addDoc() {EsUtil.es((esClient) -> {IndexRequest request = new IndexRequest("user");request.id("1001");User user = new User();user.setName("张三");user.setAge(20);user.setSex("男");ObjectMapper objectMapper = new ObjectMapper();try {String userJson = objectMapper.writeValueAsString(user);request.source(userJson, XContentType.JSON);} catch (JsonProcessingException e) {throw new RuntimeException(e);}try {IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);System.out.println("response.getResult() = " + response.getResult());} catch (IOException e) {throw new RuntimeException(e);}});}
 

 
2.修改文档
 
1.代码
 
    @Testpublic void updateDoc() {EsUtil.es((esClient) -> {UpdateRequest request = new UpdateRequest();request.index("user").id("1001");request.doc(XContentType.JSON, "sex", "女");UpdateResponse update = null;try {update = esClient.update(request, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}System.out.println("update.getResult() = " + update.getResult());});}
 
2.结果
 

 
3.查询文档
 
    @Testpublic void searchDoc() {EsUtil.es((esClient) -> {GetRequest user = new GetRequest("user", "1001");try {GetResponse response = esClient.get(user, RequestOptions.DEFAULT);System.out.println("response.getSourceAsString() = " + response.getSourceAsString());} catch (IOException e) {throw new RuntimeException(e);}});}
 
4.删除文档
 
@Test
public void deleteDoc() {EsUtil.es((esClient) -> {try {DeleteRequest user = new DeleteRequest("user", "1001");DeleteResponse response = esClient.delete(user, RequestOptions.DEFAULT);System.out.println("response.toString() = " + response.toString());} catch (IOException e) {throw new RuntimeException(e);}});
}
 
5.批量新增
 
    @Testpublic void batchAdditions() {EsUtil.es((esClient) -> {BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new IndexRequest("user").id("1002").source(XContentType.JSON, "name", "李四"));bulkRequest.add(new IndexRequest("user").id("1003").source(XContentType.JSON, "name", "王五"));try {BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println("response.getTook() = " + response.getTook());} catch (IOException e) {throw new RuntimeException(e);}});}
 
6.批量删除
 
    @Testpublic void batchDeletion() {EsUtil.es((esClient) -> {BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new DeleteRequest("user").id("1002"));bulkRequest.add(new DeleteRequest("user").id("1003"));try {BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println("response.getTook() = " + response.getTook());} catch (IOException e) {throw new RuntimeException(e);}});}
 
4.高级查询
 
1.全量查询
 
    @Testpublic void fullQuery() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
 

 
2.分页查询
 
    @Testpublic void pagingSearch() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchQuery("name", "李四"));builder.from(0);builder.size(1);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
 
3.排序查询
 
    @Testpublic void sortingQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.sort("age", SortOrder.ASC);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
 
4.过滤字段
 
    @Testpublic void filterFields() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());String[] includes = {"name", "age"};String[] excludes = {};builder.fetchSource(includes, excludes);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
 
5.组合查询
 
    @Testpublic void combinedQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(21).lte(22);builder.query(rangeQueryBuilder);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
 
6.高亮查询
 
    @Testpublic void highlightedQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();builder.query(QueryBuilders.matchQuery("name", "李四"));HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("name");highlightBuilder.preTags("<font color='red'>");highlightBuilder.postTags("</font>");builder.highlighter(highlightBuilder);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());System.out.println("hit.getHighlightFields() = " + hit.getHighlightFields());});} catch (IOException e) {throw new RuntimeException(e);}});}
 
7.聚合查询
 
    @Testpublic void aggregateSearch() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();TermsAggregationBuilder ageGroup = AggregationBuilders.terms("ageGroup").field("age");builder.aggregation(ageGroup);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}