本文最后更新于:February 26, 2022 pm
                
              
            
            
              Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
目录
全量查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.delete.DeleteRequest;
 import org.elasticsearch.action.delete.DeleteResponse;
 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.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
条件查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.delete.DeleteRequest;
 import org.elasticsearch.action.delete.DeleteResponse;
 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.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("phone","88888")));
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
注意:这里查询时,条件不能为name,因为被识别成关键字类型了!而且中文是无法作为条件的,默认的是字符串分词。
分页查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.bulk.BulkRequest;
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.delete.DeleteRequest;
 import org.elasticsearch.action.delete.DeleteResponse;
 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.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
 builder.from(0);
 builder.size(2);
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
排序
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
 
 builder.sort("age", SortOrder.ASC);
 
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
查询字段
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
 
 String[] excludes = {"name"};
 String[] includes = {};
 builder.fetchSource(includes,excludes);
 
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
注意:excludes和includes写其一即可。他们的区别在于:写在includes中的只会输出includes中的,写在excludes中的只有excludes中的不会输出。所以数组写其一即可。
多条件查询
同时成立
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 boolQueryBuilder.must(QueryBuilders.matchQuery("age",13));
 
 boolQueryBuilder.must(QueryBuilders.matchQuery("phone","88888"));
 
 builder.query(boolQueryBuilder);
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
成立之一
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 boolQueryBuilder.should(QueryBuilders.matchQuery("age",13));
 boolQueryBuilder.should(QueryBuilders.matchQuery("phone","88888"));
 
 builder.query(boolQueryBuilder);
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
范围查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.RangeQueryBuilder;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
 rangeQuery.gte(30);
 rangeQuery.lte(40);
 
 
 builder.query(rangeQuery);
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
模糊查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.common.unit.Fuzziness;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.RangeQueryBuilder;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.sort.SortOrder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 
 builder.query(QueryBuilders.fuzzyQuery("phone","8888").fuzziness(Fuzziness.ONE));
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
高亮查询
未成功。。。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.*;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "墨水记忆8888");
 
 HighlightBuilder highlightBuilder = new HighlightBuilder();
 highlightBuilder.preTags("<font color='red' >");
 highlightBuilder.preTags("</font>");
 highlightBuilder.field("name");
 
 builder.highlighter(highlightBuilder);
 builder.query(termsQueryBuilder);
 
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 | 
最大值查询
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 
 | package com.tothefor.ES;
 import org.apache.http.HttpHost;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestClient;
 import org.elasticsearch.client.RestHighLevelClient;
 import org.elasticsearch.index.query.*;
 import org.elasticsearch.search.SearchHit;
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.aggregations.AggregationBuilder;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.metrics.MaxAggregationBuilder;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
 
 import java.io.IOException;
 
 public class EsTest_client {
 public static void main(String[] args) throws IOException {
 RestHighLevelClient esClient = new RestHighLevelClient(
 RestClient.builder(new HttpHost("localhost",9200,"http"))
 );
 
 
 SearchRequest request = new SearchRequest();
 request.indices("loong");
 
 SearchSourceBuilder builder = new SearchSourceBuilder();
 
 AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxage").field("age");
 builder.aggregation(aggregationBuilder);
 
 
 request.source(builder);
 
 SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
 
 SearchHits hits = response.getHits();
 
 System.out.println(hits.getTotalHits());
 
 for( SearchHit it: hits){
 System.out.println(it.getIndex());
 System.out.println(it.getSourceAsString());
 }
 
 
 esClient.close();
 }
 }
 
 
 |