• ELK 基础使用 Java操作elasticseach (四)


    目录

    一、添加依赖

    二、索引操作案例

    1、创建索引的案例

     2、获取索引的案例

    3、删除索引

    三、文档操作案例

    1、创建文档

    2、更新文档

    3、获取文档

    4、删除文档

     5、批量插入

    6、批量删除

    四、高级查询

     1、查询索引下所有文档

     2、条件查询

    3、分页查询

     4、查询排序

    5、过滤查询

    6、组合查询

    7、范围查询

     8、模糊查询

    9、高亮查询

     10、分组查询


    一、添加依赖

    1. <properties>
    2. <maven.compiler.source>8maven.compiler.source>
    3. <maven.compiler.target>8maven.compiler.target>
    4. properties>
    5. <dependencies>
    6. <dependency>
    7. <groupId>org.elasticsearchgroupId>
    8. <artifactId>elasticsearchartifactId>
    9. <version>7.8.0version>
    10. dependency>
    11. <dependency>
    12. <groupId>org.elasticsearch.clientgroupId>
    13. <artifactId>elasticsearch-rest-high-level-clientartifactId>
    14. <version>7.8.0version>
    15. dependency>
    16. <dependency>
    17. <groupId>org.apache.logging.log4jgroupId>
    18. <artifactId>log4j-apiartifactId>
    19. <version>2.17.1version>
    20. dependency>
    21. <dependency>
    22. <groupId>org.apache.logging.log4jgroupId>
    23. <artifactId>log4j-coreartifactId>
    24. <version>2.17.1version>
    25. dependency>
    26. <dependency>
    27. <groupId>com.fasterxml.jackson.coregroupId>
    28. <artifactId>jackson-databindartifactId>
    29. <version>2.13.3version>
    30. dependency>
    31. <dependency>
    32. <groupId>junitgroupId>
    33. <artifactId>junitartifactId>
    34. <version>4.13.2version>
    35. <scope>testscope>
    36. dependency>
    37. dependencies>

    二、索引操作案例

    1、创建索引的案例

    先通过ApiPost测试访问

    可以看到运行代码之前customer文档索引是不存在的

    代码:

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.client.RequestOptions;
    4. import org.elasticsearch.client.RestClient;
    5. import org.elasticsearch.client.RestHighLevelClient;
    6. import org.elasticsearch.client.indices.CreateIndexRequest;
    7. import org.elasticsearch.client.indices.CreateIndexResponse;
    8. /**
    9. * @author DragonWu
    10. * @date 2022-09-17 18:54
    11. **/
    12. public class ElkTestIndexCreate {
    13. public static void main(String[] args) throws Exception{
    14. //创建ES客户端
    15. RestHighLevelClient esClient=new RestHighLevelClient(
    16. RestClient.builder(new HttpHost("localhost",9200,"http"))
    17. );
    18. //创建索引
    19. CreateIndexRequest request = new CreateIndexRequest("customer");
    20. CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);
    21. //响应状态
    22. boolean acknowledged = createIndexResponse.isAcknowledged();
    23. System.out.println("索引操作:"+acknowledged);
    24. //关闭ES客户端
    25. esClient.close();
    26. }
    27. }

     再次查询,可以查询到对应文档索引了,证明代码执行成功

     索引创建成功

     2、获取索引的案例

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.client.RequestOptions;
    4. import org.elasticsearch.client.RestClient;
    5. import org.elasticsearch.client.RestHighLevelClient;
    6. import org.elasticsearch.client.indices.GetIndexRequest;
    7. import org.elasticsearch.client.indices.GetIndexResponse;
    8. /**
    9. * @author DragonWu
    10. * @date 2022-09-18 9:16
    11. **/
    12. public class ElkTestIndexSearch {
    13. public static void main(String[] args) throws Exception{
    14. //创建ES客户端
    15. RestHighLevelClient esClient=new RestHighLevelClient(
    16. RestClient.builder(new HttpHost("localhost",9200,"http"))
    17. );
    18. //查询索引
    19. GetIndexRequest request=new GetIndexRequest("customer");
    20. GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);
    21. //响应状态
    22. System.out.println(getIndexResponse.getAliases());
    23. System.out.println(getIndexResponse.getMappings());
    24. System.out.println(getIndexResponse.getSettings());
    25. //关闭ES客户端
    26. esClient.close();
    27. }
    28. }

    运行截图

    可以看到该索引已被找到。

    3、删除索引

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
    4. import org.elasticsearch.action.support.master.AcknowledgedResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. /**
    9. * @author DragonWu
    10. * @date 2022-09-18 9:25
    11. **/
    12. public class ElkTestIndexDelete {
    13. public static void main(String[] args) throws Exception{
    14. //创建ES客户端
    15. RestHighLevelClient esClient=new RestHighLevelClient(
    16. RestClient.builder(new HttpHost("localhost",9200,"http"))
    17. );
    18. //查询索引
    19. DeleteIndexRequest request=new DeleteIndexRequest("customer");
    20. AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
    21. //响应状态
    22. System.out.println(response.isAcknowledged());
    23. //关闭ES客户端
    24. esClient.close();
    25. }
    26. }

     运行截图

     删除成功

    三、文档操作案例

    1、创建文档

    首先创建实体类

    1. package com.dragon.test;
    2. /**
    3. * @author DragonWu
    4. * @date 2022-09-18 9:32
    5. **/
    6. public class User {
    7. private String name;
    8. private String sex;
    9. private Integer age;
    10. public String getName() {
    11. return name;
    12. }
    13. public void setName(String name) {
    14. this.name = name;
    15. }
    16. public String getSex() {
    17. return sex;
    18. }
    19. public void setSex(String sex) {
    20. this.sex = sex;
    21. }
    22. public Integer getAge() {
    23. return age;
    24. }
    25. public void setAge(Integer age) {
    26. this.age = age;
    27. }
    28. }
    1. package com.dragon.test;
    2. import com.fasterxml.jackson.databind.ObjectMapper;
    3. import org.apache.http.HttpHost;
    4. import org.elasticsearch.action.index.IndexRequest;
    5. import org.elasticsearch.action.index.IndexResponse;
    6. import org.elasticsearch.client.RequestOptions;
    7. import org.elasticsearch.client.RestClient;
    8. import org.elasticsearch.client.RestHighLevelClient;
    9. import org.elasticsearch.common.xcontent.XContentType;
    10. /**
    11. * @author DragonWu
    12. * @date 2022-09-18 9:34
    13. **/
    14. public class ElkTestDocInsert {
    15. public static void main(String[] args) throws Exception{
    16. //创建ES客户端
    17. RestHighLevelClient esClient=new RestHighLevelClient(
    18. RestClient.builder(new HttpHost("localhost",9200,"http"))
    19. );
    20. //插入数据
    21. IndexRequest request=new IndexRequest();
    22. request.index("user").id("1004");
    23. User user=new User();
    24. user.setName("张三");
    25. user.setAge(21);
    26. user.setSex("男");
    27. //向ES中插入数据,必须将数据转换为JSON格式
    28. ObjectMapper mapper=new ObjectMapper();
    29. String userJson = mapper.writeValueAsString(user);
    30. request.source(userJson, XContentType.JSON);
    31. IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
    32. // System.out.println(response.getResult());
    33. //关闭ES客户端
    34. esClient.close();
    35. }
    36. }

    通过ApiPost查询数据:

     可以看到数据已经更新

    2、更新文档

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.update.UpdateRequest;
    4. import org.elasticsearch.action.update.UpdateResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.common.xcontent.XContentType;
    9. /**
    10. * @author DragonWu
    11. * @date 2022-09-18 9:34
    12. **/
    13. public class ElkTestDocUpdate {
    14. public static void main(String[] args) throws Exception{
    15. //创建ES客户端
    16. RestHighLevelClient esClient=new RestHighLevelClient(
    17. RestClient.builder(new HttpHost("localhost",9200,"http"))
    18. );
    19. //修改数据
    20. UpdateRequest request=new UpdateRequest();
    21. request.index("user").id("1004");
    22. request.doc(XContentType.JSON,"sex","女");
    23. UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);
    24. System.out.println(response.getResult());
    25. //关闭ES客户端
    26. esClient.close();
    27. }
    28. }

    再次查询user的id为1004的文档

     可以看到sex已局部更新

    3、获取文档

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.get.GetRequest;
    4. import org.elasticsearch.action.get.GetResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. /**
    9. * @author DragonWu
    10. * @date 2022-09-18 10:02
    11. **/
    12. public class ElkTestDocSearch {
    13. public static void main(String[] args) throws Exception{
    14. //创建ES客户端
    15. RestHighLevelClient esClient=new RestHighLevelClient(
    16. RestClient.builder(new HttpHost("localhost",9200,"http"))
    17. );
    18. //查询请求
    19. GetRequest request=new GetRequest();
    20. request.index("user").id("1004");
    21. GetResponse documentFields=esClient.get(request, RequestOptions.DEFAULT);
    22. System.out.println(documentFields.getSourceAsString());
    23. //关闭ES客户端
    24. esClient.close();
    25. }
    26. }

    运行截图

    可以看到文档查询成功 

    4、删除文档

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.delete.DeleteRequest;
    4. import org.elasticsearch.action.delete.DeleteResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. /**
    9. * @author DragonWu
    10. * @date 2022-09-18 10:02
    11. **/
    12. public class ElkTestDocDelete {
    13. public static void main(String[] args) throws Exception{
    14. //创建ES客户端
    15. RestHighLevelClient esClient=new RestHighLevelClient(
    16. RestClient.builder(new HttpHost("localhost",9200,"http"))
    17. );
    18. //删除文档
    19. DeleteRequest request=new DeleteRequest();
    20. request.index("user").id("1004");
    21. DeleteResponse response=esClient.delete(request, RequestOptions.DEFAULT);
    22. System.out.println(response.toString());
    23. //关闭ES客户端
    24. esClient.close();
    25. }
    26. }

    再次查询,可以看到查询失败,证明删除成功

     5、批量插入

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.bulk.BulkRequest;
    4. import org.elasticsearch.action.bulk.BulkResponse;
    5. import org.elasticsearch.action.index.IndexRequest;
    6. import org.elasticsearch.client.RequestOptions;
    7. import org.elasticsearch.client.RestClient;
    8. import org.elasticsearch.client.RestHighLevelClient;
    9. import org.elasticsearch.common.xcontent.XContentType;
    10. import java.util.Arrays;
    11. /**
    12. * @author DragonWu
    13. * @date 2022-09-18 10:29
    14. **/
    15. public class ElkTestBatchInsert {
    16. public static void main(String[] args) throws Exception{
    17. //创建ES客户端
    18. RestHighLevelClient esClient=new RestHighLevelClient(
    19. RestClient.builder(new HttpHost("localhost",9200,"http"))
    20. );
    21. //批量插入数据
    22. BulkRequest request=new BulkRequest();
    23. request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","李四"));
    24. request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON,"name","赵六"));
    25. request.add(new IndexRequest().index("user").id("1006").source(XContentType.JSON,"name","洪七"));
    26. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
    27. System.out.println(response.getTook());
    28. System.out.println(Arrays.toString(response.getItems()));
    29. //关闭ES客户端
    30. esClient.close();
    31. }
    32. }

    再次查询

    可以看到批量插入成功

    6、批量删除

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.bulk.BulkRequest;
    4. import org.elasticsearch.action.bulk.BulkResponse;
    5. import org.elasticsearch.action.delete.DeleteRequest;
    6. import org.elasticsearch.client.RequestOptions;
    7. import org.elasticsearch.client.RestClient;
    8. import org.elasticsearch.client.RestHighLevelClient;
    9. import java.util.Arrays;
    10. /**
    11. * @author DragonWu
    12. * @date 2022-09-18 10:29
    13. **/
    14. public class ElkTestBatchDelete {
    15. public static void main(String[] args) throws Exception{
    16. //创建ES客户端
    17. RestHighLevelClient esClient=new RestHighLevelClient(
    18. RestClient.builder(new HttpHost("localhost",9200,"http"))
    19. );
    20. //批量插入数据
    21. BulkRequest request=new BulkRequest();
    22. request.add(new DeleteRequest().index("user").id("1004"));
    23. request.add(new DeleteRequest().index("user").id("1005"));
    24. request.add(new DeleteRequest().index("user").id("1006"));
    25. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
    26. System.out.println(response.getTook());
    27. System.out.println(Arrays.toString(response.getItems()));
    28. //关闭ES客户端
    29. esClient.close();
    30. }
    31. }

    四、高级查询

    首先模拟插入数据以便后面的查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.bulk.BulkRequest;
    4. import org.elasticsearch.action.bulk.BulkResponse;
    5. import org.elasticsearch.action.index.IndexRequest;
    6. import org.elasticsearch.client.RequestOptions;
    7. import org.elasticsearch.client.RestClient;
    8. import org.elasticsearch.client.RestHighLevelClient;
    9. import org.elasticsearch.common.xcontent.XContentType;
    10. import java.util.Arrays;
    11. /**
    12. * @author DragonWu
    13. * @date 2022-09-18 10:29
    14. **/
    15. public class ElkTestBatchInsert {
    16. public static void main(String[] args) throws Exception{
    17. //创建ES客户端
    18. RestHighLevelClient esClient=new RestHighLevelClient(
    19. RestClient.builder(new HttpHost("localhost",9200,"http"))
    20. );
    21. //批量插入数据
    22. BulkRequest request=new BulkRequest();
    23. request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","李四","age",30,"sex","男"));
    24. request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON,"name","赵六","age",40,"sex","男"));
    25. request.add(new IndexRequest().index("user").id("1006").source(XContentType.JSON,"name","洪七","age",50,"sex","女"));
    26. request.add(new IndexRequest().index("user").id("1007").source(XContentType.JSON,"name","王五","age",30,"sex","男"));
    27. request.add(new IndexRequest().index("user").id("1008").source(XContentType.JSON,"name","张三","age",40,"sex","男"));
    28. request.add(new IndexRequest().index("user").id("1009").source(XContentType.JSON,"name","王二","age",50,"sex","女"));
    29. BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
    30. System.out.println(response.getTook());
    31. System.out.println(Arrays.toString(response.getItems()));
    32. //关闭ES客户端
    33. esClient.close();
    34. }
    35. }

    通过ApiPost查询可以看到如下数据文档列表

    1. {
    2. "took": 945,
    3. "timed_out": false,
    4. "_shards": {
    5. "total": 1,
    6. "successful": 1,
    7. "skipped": 0,
    8. "failed": 0
    9. },
    10. "hits": {
    11. "total": {
    12. "value": 9,
    13. "relation": "eq"
    14. },
    15. "max_score": 1,
    16. "hits": [
    17. {
    18. "_index": "user",
    19. "_id": "1002",
    20. "_score": 1,
    21. "_source": {
    22. "name": "Fack",
    23. "sex": "男",
    24. "tel": 11011011012
    25. }
    26. },
    27. {
    28. "_index": "user",
    29. "_id": "1003",
    30. "_score": 1,
    31. "_source": {
    32. "name": "Alice",
    33. "sex": "女",
    34. "tel": 11011011013
    35. }
    36. },
    37. {
    38. "_index": "user",
    39. "_id": "1001",
    40. "_score": 1,
    41. "_source": {
    42. "name": "张三",
    43. "sex": "男",
    44. "age": 21
    45. }
    46. },
    47. {
    48. "_index": "user",
    49. "_id": "1004",
    50. "_score": 1,
    51. "_source": {
    52. "name": "李四",
    53. "age": 30,
    54. "sex": "男"
    55. }
    56. },
    57. {
    58. "_index": "user",
    59. "_id": "1005",
    60. "_score": 1,
    61. "_source": {
    62. "name": "赵六",
    63. "age": 40,
    64. "sex": "男"
    65. }
    66. },
    67. {
    68. "_index": "user",
    69. "_id": "1006",
    70. "_score": 1,
    71. "_source": {
    72. "name": "洪七",
    73. "age": 50,
    74. "sex": "女"
    75. }
    76. },
    77. {
    78. "_index": "user",
    79. "_id": "1007",
    80. "_score": 1,
    81. "_source": {
    82. "name": "王五",
    83. "age": 30,
    84. "sex": "男"
    85. }
    86. },
    87. {
    88. "_index": "user",
    89. "_id": "1008",
    90. "_score": 1,
    91. "_source": {
    92. "name": "张三",
    93. "age": 40,
    94. "sex": "男"
    95. }
    96. },
    97. {
    98. "_index": "user",
    99. "_id": "1009",
    100. "_score": 1,
    101. "_source": {
    102. "name": "王二",
    103. "age": 50,
    104. "sex": "女"
    105. }
    106. }
    107. ]
    108. }
    109. }

     1、查询索引下所有文档

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.search.SearchHit;
    10. import org.elasticsearch.search.SearchHits;
    11. import org.elasticsearch.search.builder.SearchSourceBuilder;
    12. /**
    13. * @author DragonWu
    14. * @date 2022-09-18 10:46
    15. **/
    16. public class DocQuery {
    17. public static void main(String[] args) throws Exception {
    18. //创建ES客户端
    19. RestHighLevelClient esClient = new RestHighLevelClient(
    20. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    21. );
    22. //查询索引中全部数据
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
    26. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    27. SearchHits hits = searchResponse.getHits();
    28. System.out.println(hits.getTotalHits());
    29. System.out.println(searchResponse.getTook());
    30. for (SearchHit hit : hits) {
    31. System.out.println(hit.getSourceAsString());
    32. }
    33. //关闭ES客户端
    34. esClient.close();
    35. }
    36. }

    运行截图

    可以看到之前批量插入的数据都获取到了

     2、条件查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.search.SearchHit;
    10. import org.elasticsearch.search.SearchHits;
    11. import org.elasticsearch.search.builder.SearchSourceBuilder;
    12. /**
    13. * @author DragonWu
    14. * @date 2022-09-18 10:46
    15. **/
    16. public class DocQuery {
    17. public static void main(String[] args) throws Exception {
    18. //创建ES客户端
    19. RestHighLevelClient esClient = new RestHighLevelClient(
    20. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    21. );
    22. //条件查询 : termQuery
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age",30)));
    26. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    27. SearchHits hits = searchResponse.getHits();
    28. System.out.println(hits.getTotalHits());
    29. System.out.println(searchResponse.getTook());
    30. for (SearchHit hit : hits) {
    31. System.out.println(hit.getSourceAsString());
    32. }
    33. //关闭ES客户端
    34. esClient.close();
    35. }
    36. }

    运行截图

    可以看到条件查询的数据 

    3、分页查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.search.SearchHit;
    10. import org.elasticsearch.search.SearchHits;
    11. import org.elasticsearch.search.builder.SearchSourceBuilder;
    12. /**
    13. * @author DragonWu
    14. * @date 2022-09-18 10:46
    15. **/
    16. public class DocQuery {
    17. public static void main(String[] args) throws Exception {
    18. //创建ES客户端
    19. RestHighLevelClient esClient = new RestHighLevelClient(
    20. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    21. );
    22. //条件查询 : termQuery
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    26. //(当前页码-1)*每页显示的条数
    27. builder.from(0);
    28. builder.size(2);
    29. request.source(builder);
    30. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    31. SearchHits hits = searchResponse.getHits();
    32. System.out.println(hits.getTotalHits());
    33. System.out.println(searchResponse.getTook());
    34. for (SearchHit hit : hits) {
    35. System.out.println(hit.getSourceAsString());
    36. }
    37. //关闭ES客户端
    38. esClient.close();
    39. }
    40. }

    可以看到分页查询成功

     4、查询排序

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.search.SearchHit;
    10. import org.elasticsearch.search.SearchHits;
    11. import org.elasticsearch.search.builder.SearchSourceBuilder;
    12. import org.elasticsearch.search.sort.SortOrder;
    13. /**
    14. * @author DragonWu
    15. * @date 2022-09-18 10:46
    16. **/
    17. public class DocQuery {
    18. public static void main(String[] args) throws Exception {
    19. //创建ES客户端
    20. RestHighLevelClient esClient = new RestHighLevelClient(
    21. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    22. );
    23. //条件查询 : termQuery
    24. SearchRequest request = new SearchRequest();
    25. request.indices("user");
    26. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    27. builder.sort("age", SortOrder.DESC);
    28. request.source(builder);
    29. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    30. SearchHits hits = searchResponse.getHits();
    31. System.out.println(hits.getTotalHits());
    32. System.out.println(searchResponse.getTook());
    33. for (SearchHit hit : hits) {
    34. System.out.println(hit.getSourceAsString());
    35. }
    36. //关闭ES客户端
    37. esClient.close();
    38. }
    39. }

    排序成功

    5、过滤查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.search.SearchHit;
    10. import org.elasticsearch.search.SearchHits;
    11. import org.elasticsearch.search.builder.SearchSourceBuilder;
    12. /**
    13. * @author DragonWu
    14. * @date 2022-09-18 10:46
    15. **/
    16. public class DocQuery {
    17. public static void main(String[] args) throws Exception {
    18. //创建ES客户端
    19. RestHighLevelClient esClient = new RestHighLevelClient(
    20. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    21. );
    22. SearchRequest request = new SearchRequest();
    23. request.indices("user");
    24. SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
    25. String[] excludes={};
    26. String[] includes={"name"};
    27. builder.fetchSource(includes,excludes);
    28. request.source(builder);
    29. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    30. SearchHits hits = searchResponse.getHits();
    31. System.out.println(hits.getTotalHits());
    32. System.out.println(searchResponse.getTook());
    33. for (SearchHit hit : hits) {
    34. System.out.println(hit.getSourceAsString());
    35. }
    36. //关闭ES客户端
    37. esClient.close();
    38. }
    39. }

    可以看到过滤后只剩下name字段 

    6、组合查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.BoolQueryBuilder;
    9. import org.elasticsearch.index.query.QueryBuilders;
    10. import org.elasticsearch.search.SearchHit;
    11. import org.elasticsearch.search.SearchHits;
    12. import org.elasticsearch.search.builder.SearchSourceBuilder;
    13. /**
    14. * @author DragonWu
    15. * @date 2022-09-18 10:46
    16. **/
    17. public class DocQuery {
    18. public static void main(String[] args) throws Exception {
    19. //创建ES客户端
    20. RestHighLevelClient esClient = new RestHighLevelClient(
    21. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    22. );
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. SearchSourceBuilder builder = new SearchSourceBuilder();
    26. BoolQueryBuilder boolQueryBuilder= QueryBuilders.boolQuery();
    27. boolQueryBuilder.should(QueryBuilders.matchQuery("age",30));
    28. boolQueryBuilder.should(QueryBuilders.matchQuery("age",40));
    29. builder.query(boolQueryBuilder);
    30. request.source(builder);
    31. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    32. SearchHits hits = searchResponse.getHits();
    33. System.out.println(hits.getTotalHits());
    34. System.out.println(searchResponse.getTook());
    35. for (SearchHit hit : hits) {
    36. System.out.println(hit.getSourceAsString());
    37. }
    38. //关闭ES客户端
    39. esClient.close();
    40. }
    41. }

    运行截图

    7、范围查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.index.query.RangeQueryBuilder;
    10. import org.elasticsearch.search.SearchHit;
    11. import org.elasticsearch.search.SearchHits;
    12. import org.elasticsearch.search.builder.SearchSourceBuilder;
    13. /**
    14. * @author DragonWu
    15. * @date 2022-09-18 10:46
    16. **/
    17. public class DocQuery {
    18. public static void main(String[] args) throws Exception {
    19. //创建ES客户端
    20. RestHighLevelClient esClient = new RestHighLevelClient(
    21. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    22. );
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. SearchSourceBuilder builder = new SearchSourceBuilder();
    26. RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
    27. rangeQuery.gte(30);
    28. rangeQuery.lte(40);
    29. builder.query(rangeQuery);
    30. request.source(builder);
    31. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    32. SearchHits hits = searchResponse.getHits();
    33. System.out.println(hits.getTotalHits());
    34. System.out.println(searchResponse.getTook());
    35. for (SearchHit hit : hits) {
    36. System.out.println(hit.getSourceAsString());
    37. }
    38. //关闭ES客户端
    39. esClient.close();
    40. }
    41. }

     

     8、模糊查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.common.unit.Fuzziness;
    9. import org.elasticsearch.index.query.QueryBuilders;
    10. import org.elasticsearch.search.SearchHit;
    11. import org.elasticsearch.search.SearchHits;
    12. import org.elasticsearch.search.builder.SearchSourceBuilder;
    13. /**
    14. * @author DragonWu
    15. * @date 2022-09-18 10:46
    16. **/
    17. public class DocQuery {
    18. public static void main(String[] args) throws Exception {
    19. //创建ES客户端
    20. RestHighLevelClient esClient = new RestHighLevelClient(
    21. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    22. );
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. SearchSourceBuilder builder = new SearchSourceBuilder();
    26. builder.query(QueryBuilders.fuzzyQuery("name","张三").fuzziness(Fuzziness.ONE));
    27. request.source(builder);
    28. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    29. SearchHits hits = searchResponse.getHits();
    30. System.out.println(hits.getTotalHits());
    31. System.out.println(searchResponse.getTook());
    32. for (SearchHit hit : hits) {
    33. System.out.println(hit.getSourceAsString());
    34. }
    35. //关闭ES客户端
    36. esClient.close();
    37. }
    38. }

    9、高亮查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.index.query.QueryBuilders;
    9. import org.elasticsearch.index.query.TermsQueryBuilder;
    10. import org.elasticsearch.search.SearchHit;
    11. import org.elasticsearch.search.SearchHits;
    12. import org.elasticsearch.search.builder.SearchSourceBuilder;
    13. import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
    14. /**
    15. * @author DragonWu
    16. * @date 2022-09-18 10:46
    17. **/
    18. public class DocQuery {
    19. public static void main(String[] args) throws Exception {
    20. //创建ES客户端
    21. RestHighLevelClient esClient = new RestHighLevelClient(
    22. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    23. );
    24. SearchRequest request = new SearchRequest();
    25. request.indices("user");
    26. SearchSourceBuilder builder = new SearchSourceBuilder();
    27. TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "李四");
    28. HighlightBuilder highlightBuilder=new HighlightBuilder();
    29. highlightBuilder.preTags("");
    30. highlightBuilder.postTags("");
    31. highlightBuilder.field("name");
    32. builder.highlighter(highlightBuilder);
    33. builder.query(termsQueryBuilder);
    34. request.source(builder);
    35. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    36. SearchHits hits = searchResponse.getHits();
    37. System.out.println(hits.getTotalHits());
    38. System.out.println(searchResponse.getTook());
    39. for (SearchHit hit : hits) {
    40. System.out.println(hit.getSourceAsString());
    41. }
    42. //关闭ES客户端
    43. esClient.close();
    44. }
    45. }

     10、分组查询

    1. package com.dragon.test;
    2. import org.apache.http.HttpHost;
    3. import org.elasticsearch.action.search.SearchRequest;
    4. import org.elasticsearch.action.search.SearchResponse;
    5. import org.elasticsearch.client.RequestOptions;
    6. import org.elasticsearch.client.RestClient;
    7. import org.elasticsearch.client.RestHighLevelClient;
    8. import org.elasticsearch.search.SearchHit;
    9. import org.elasticsearch.search.SearchHits;
    10. import org.elasticsearch.search.aggregations.AggregationBuilders;
    11. import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
    12. import org.elasticsearch.search.builder.SearchSourceBuilder;
    13. /**
    14. * @author DragonWu
    15. * @date 2022-09-18 10:46
    16. **/
    17. public class DocQuery {
    18. public static void main(String[] args) throws Exception {
    19. //创建ES客户端
    20. RestHighLevelClient esClient = new RestHighLevelClient(
    21. RestClient.builder(new HttpHost("localhost", 9200, "http"))
    22. );
    23. SearchRequest request = new SearchRequest();
    24. request.indices("user");
    25. SearchSourceBuilder builder=new SearchSourceBuilder();
    26. TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
    27. builder.aggregation(aggregationBuilder);
    28. request.source(builder);
    29. SearchResponse searchResponse = esClient.search(request, RequestOptions.DEFAULT);
    30. SearchHits hits = searchResponse.getHits();
    31. System.out.println(hits.getTotalHits());
    32. System.out.println(searchResponse.getTook());
    33. for (SearchHit hit : hits) {
    34. System.out.println(hit.getSourceAsString());
    35. }
    36. //关闭ES客户端
    37. esClient.close();
    38. }
    39. }

  • 相关阅读:
    Vue3, setup语法糖、Composition API全方位解读
    Win10文件资源管理器卡顿不流畅的解决方法
    Maven下载、安装、配置教程
    javascript: Sorting Algorithms
    Linux端口相关命令行
    基于随机无迹σ变异的改进HHO算法
    antv x6 沿边图标循环动画实现
    MYSQL快速从另外一张表中更新数据
    Android开发学习日记--简单页面跳转、延时页面跳转
    Ps:选框工具
  • 原文地址:https://blog.csdn.net/qq_50909707/article/details/126909308