详解 ElasticSearch 基础教程

复制代码
🌹 ElasticSearch 基础教程,请指教。
 
🌹🌹 如你对技术也感兴趣,欢迎交流。
 
🌹🌹🌹  如有对阁下帮助,请👍点赞💖收藏🐱‍🏍分享😀

理论

Elasticsearch: The Official Distributed Search & Analytics Engine | ElasticElasticsearch is the leading distributed, RESTful, free and open search and analytics engine designed for speed, horizontal scalability, reliability, and easy management. Get started for free.https://www.elastic.co/elasticsearch/

Elasticsearch是基于Apache Lucene的搜索服务器它的最新版本是8.10.2。

Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(JavaScript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量的数据。

Elasticsearch & MYSQL

索引

对比关系型数据库,创建索引就等同于创建数据库

创建

复制代码
PUT /shopping

HTTP 的 PUT 请求

查看

单个索引

复制代码
GET /shopping

HTTP 的 GET 请求

全部索引

复制代码
GET /_cat/indices?v

HTTP 的 GET 请求

删除

复制代码
DELETE /shopping

HTTP 的 DELETE 请求

文档

创建

随机ID

复制代码
POST /shopping/_doc
{
  "title":"华为meta60pro",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"6499.00"
}

自定义ID

复制代码
POST /shopping/_doc/1000
{
  "title":"华为meta60pro max",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"7499.00"
}

PUT /shopping/_doc/1002
{
  "title":"华为meta60pro max尊享",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"8499.00"
}

查询

主键查询

不存在查询

全部查询

复制代码
GET /shopping/_search

修改

全量更新

复制代码
PUT /shopping/_doc/1002
{
  "title":"华为meta60pro max尊享",
  "category":"手机",
  "images":"https://www.gulixueyuan.com/xm.jpg",
  "price":"12999.00"
}

修改

修改后

局部更新

复制代码
POST /shopping/_update/1002
{
  "doc":{
    "title":"华为meta70pro max尊享"
  }
}

删除

复制代码
DELETE /shopping/_doc/1000

复杂查询

请求路径方式

复制代码
GET /shopping/_search?q=category:手机

请求体方式

属性查询
复制代码
GET /shopping/_search
{
  "query":{
    "match": {
      "category": "手机"
    }
  }
}
全量查询
复制代码
GET /shopping/_search
{
  "query":{
    "match_all": {}
  }
}
分页查询
复制代码
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2
}
指定返回属性
复制代码
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2,
  "_source": ["price","title"]
}
排序
复制代码
GET /shopping/_search
{
  "query":{
    "match_all": {}
  },
  "from": 1,
  "size": 2,
  "_source": ["title"],
  "sort": [
    {
      "title": {
        "order": "desc"
      }
    }
  ]
}
错误
复制代码
# 设置属性类型
PUT shopping/_mapping
{
    "properties": {
      "price": {
        "type": "text"
      },
      "title": {
        "fielddata": true, 
        "type": "text"
      }
    }
}

查询结果

组合查询

同时满足所有条件

复制代码
## SQL: category="手机" AND price="6499.00"
GET /shopping/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": "6499.00"
          }
        }
      ]
    }
  }
}

满足某个条件

复制代码
## SQL: category="手机" OR price="6499.00" 
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": "6499.00"
          }
        }
      ]
    }
  }
}

范围查询

复制代码
## SQL: (category="手机" OR price=6499.00) and (price between 6500 and 10000) 
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": 6499.00
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gt": 6500,
            "lt": 10000
          }
        }
      }
    }
  }
}

分页排序

复制代码
# SQL: (category="手机" OR price=6499.00) and (price between 6500 and 10000)  limit 2 order by price desc
GET /shopping/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "match": {
          "category": "手机"
        }
        },
        {
          "match": {
            "price": 6499.00
          }
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gt": 6500,
            "lt": 10000
          }
        }
      }
    }
  },
  "from": 0,
  "size": 2,
  "sort": [
      {
      "price": {
        "order": "desc"
      }
    }
  ]
}

高亮显示

复制代码
GET /shopping/_search
{
  "query":{
    "match_phrase": {
      "category": "手机"
    }
  },
  "highlight": {
    "fields": {
      "category": {}
    }
  }
}

聚合查询

分组聚合

复制代码
GET /shopping/_search
{
 "aggs": {
   "cacl_avg": {
     "terms": {
       "field":"price"
     }
   }
 },
 "size": 0
}

计算平均值

复制代码
GET /shopping/_search
{
 "aggs": {
   "cacl_avg": {
     "avg": {
       "field":"price"
     }
   }
 },
 "size": 0
}

创建映射关系

映射关系

复制代码
PUT /user/_mapping
{
  "properties": {
    "user":{
      "type": "text",
      "index": true
    },
    "sex":{
      "type": "keyword",
      "index": false
    },
    "tel":{
      "type": "keyword",
      "index": true
    }
  }
}

数据

分词查询(type=text)

关键字查询 (type=keyword)

未被索引,不允许查询

总结

type=text ,index=true 时,可分词可查询;

type=keyword ,index=true 时,不可分词可查询;

index=false 时,不可查询

Java API

Maven

复制代码
 <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.17.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.17.2</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.18</version>
        </dependency>

客户端

复制代码
public class ElasticSearchClient {

	
	/**
	 * 创建对象
	 *
	 * @param host 地址
	 * @param port 端口
	 */
	public static RestHighLevelClient getElasticSearchClient() {
		String host="127.0.0.1";
		int port=9200;
		String scheme="http";
		return new RestHighLevelClient(
				RestClient.builder(new HttpHost(host, port,scheme)));
	}
	
	/**
	 * 关闭
	 *
	 * @param client 客户端对象
	 */
	public static void closeClient(RestHighLevelClient client) {
		try {
			client.close();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

创建索引

复制代码
	/**

	 * 创建索引
	 *
	 * @param index 索引名
     * RestHighLevelClient restHighLevelClient = ElasticSearchClient.getElasticSearchClient();
	 */
	public static void createIndex(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			CreateIndexRequest request = new CreateIndexRequest(index);
			CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
			boolean acknowledged = createIndexResponse.isAcknowledged();
			System.out.println("索引操作:" + acknowledged);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

​​​测试

查询索引

复制代码
	/**
	 * 查询索引
	 *
	 * @param index 索引名
	 */
	public static void findIndex(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			GetIndexRequest request = new GetIndexRequest(index);
			GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(getIndexResponse.getAliases());
			System.out.println(getIndexResponse.getMappings());
			System.out.println(getIndexResponse.getSettings());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

删除索引

复制代码
/**
	 * 删除索引
	 *
	 * @param index 索引名
	 */
	public static void deleteIndex(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			DeleteIndexRequest request = new DeleteIndexRequest(index);
			AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.isAcknowledged());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

文档

创建文档

复制代码
/**
	 * 创建文档
	 *
	 * @param index  索引
	 * @param id     id
	 * @param source Json对象
	 */
	public static void addDoc(RestHighLevelClient restHighLevelClient, String index, String id, Object source) {
		try {
			//创建索引
			IndexRequest indexRequest = new IndexRequest();
			indexRequest.index(index).id(id);
			
			indexRequest.source(JSONUtil.toJsonPrettyStr(source), XContentType.JSON);
			IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(indexResponse.status());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

修改文档

复制代码
	/**
	 * 修改数据
	 *
	 * @param index  索引
	 * @param id     id
	 * @param source Json对象
	 */
	public static void updateDoc(RestHighLevelClient restHighLevelClient, String index, String id, Map<String, Object> source) {
		try {
			//创建索引
			UpdateRequest request = new UpdateRequest();
			request.index(index).id(id);
			request.doc(source, XContentType.JSON);
			UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.status());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

查询文档

复制代码
/**
	 * 查询数据
	 *
	 * @param index  索引
	 * @param id     id
	 */
	public static void findDoc(RestHighLevelClient restHighLevelClient, String index, String id) {
		try {
			//创建索引
			GetRequest request = new GetRequest();
			request.index(index).id(id);
			GetResponse getResponse = restHighLevelClient.get(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(getResponse.getSourceAsString());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

删除文档

复制代码
	/**
	 * 查询数据
	 *
	 * @param index  索引
	 * @param id     id
	 */
	public static void delDoc(RestHighLevelClient restHighLevelClient, String index, String id) {
		try {
			//创建索引
			DeleteRequest request = new DeleteRequest();
			request.index(index).id(id);
			DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getResult());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

批量文档

创建文档

复制代码
/**
	 * 创建文档
	 *
	 * @param index   索引
	 * @param id      id
	 * @param sources 数组
	 */
public static void addDoc(RestHighLevelClient restHighLevelClient, String index, List<String> ids, List<Object> sources) {
		try {
			//创建索引
			BulkRequest request = new BulkRequest();
			int size = Math.min(ids.size(), sources.size());
			for (int i = 0; i < size; i++) {
				request.add(new IndexRequest().index(index).id(ids.get(i)).source(JSONUtil.toJsonPrettyStr(sources.get(i)), XContentType.JSON));
				
			}
			
			BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(bulk.status());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

删除文档

复制代码
/**
	 * 删除数据
	 *
	 * @param index 索引
	 * @param ids    id
	 */
	public static void delDoc(RestHighLevelClient restHighLevelClient, String index, List<String> ids) {
		try {
			//创建索引
			BulkRequest request = new BulkRequest();
			for (String id : ids) {
				request.add(new DeleteRequest().index(index).id(id));
			}
			BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(bulk.status());
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

高级查询

全量查询

复制代码
/**
	 * 全量查询
	 *
	 * @param index 索引
	 */
	public static void completeSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

条件查询

复制代码
/**
	 * 条件查询
	 *
	 * @param index 索引
	 */
	public static void pageSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.termQuery("age", "16"));
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

分页查询

复制代码
/**
	 * 分页查询
	 *
	 * @param index 索引
	 */
	public static void pageSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(5);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

排序查询

复制代码
	/**
	 * 排序查询
	 *
	 * @param index 索引
	 */
	public static void sortSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(4);
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

返回属性查询

复制代码
/**
	 * 过滤查询
	 *
	 * @param index 索引
	 */
	public static void filterSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
			// 过滤
			String[] includes = {"name"};
			String[] excludes = {};
			searchSourceBuilder.fetchSource(includes, excludes);
			// 分页
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(4);
			// 排序
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

组合查询

复制代码
/**
	 * 组合查询
	 *
	 * @param index 索引
	 */
	public static void combinationSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//			boolQueryBuilder.must(QueryBuilders.matchQuery("age","19"));
//			boolQueryBuilder.must(QueryBuilders.matchQuery("name","lisi"));
//			boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex","女"));
			boolQueryBuilder.should(QueryBuilders.matchQuery("age","19"));
			boolQueryBuilder.should(QueryBuilders.matchQuery("age","20"));
			searchSourceBuilder.query(boolQueryBuilder);
			// 过滤
			String[] includes = {"name","age"};
			String[] excludes = {};
			searchSourceBuilder.fetchSource(includes, excludes);
			// 分页
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(4);
			// 排序
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

范围查询

复制代码
/**
	 * 范围查询
	 *
	 * @param index 索引
	 */
	public static void rangeSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
			RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gt(16).lt(28);
			boolQueryBuilder.filter(rangeQueryBuilder);
			searchSourceBuilder.query(boolQueryBuilder);
			// 过滤
			String[] includes = {"name","age"};
			String[] excludes = {};
			searchSourceBuilder.fetchSource(includes, excludes);
			// 分页
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(2);
			// 排序
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

模糊查询

复制代码
/**
	 * 模糊查询
	 *
	 * @param index 索引
	 */
	public static void vagueSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			// 模糊条件
			
			searchSourceBuilder.query(QueryBuilders.fuzzyQuery("name","wangwu").fuzziness(Fuzziness.TWO));
			// 过滤
			String[] includes = {"name","age"};
			String[] excludes = {};
			searchSourceBuilder.fetchSource(includes, excludes);
			// 分页
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(2);
			// 排序
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit.getSourceAsString());
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

高亮查询

复制代码
/**
	 * 高亮查询
	 *
	 * @param index 索引
	 */
	public static void highSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			// 模糊条件
			TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "wangwu");
			
			HighlightBuilder highlightBuilder=new HighlightBuilder();
			highlightBuilder.preTags("<font color='red'>").postTags("</font>").field("name");
			searchSourceBuilder.highlighter(highlightBuilder);
			searchSourceBuilder.query(termQueryBuilder);
			// 过滤
//			String[] includes = {"name","age"};
//			String[] excludes = {};
//			searchSourceBuilder.fetchSource(includes, excludes);
			// 分页
			searchSourceBuilder.from(0);
			searchSourceBuilder.size(2);
			// 排序
			searchSourceBuilder.sort("age", SortOrder.DESC);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (SearchHit hit : response.getHits().getHits()) {
				System.out.println(hit);
			}
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

聚合查询

复制代码
	/**
	 * 聚合查询
	 *
	 * @param index 索引
	 */
	public static void polymerizationSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("MaxAge").field("age");
			searchSourceBuilder.aggregation(maxAggregationBuilder);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (Aggregation aggregation : response.getAggregations()) {
				System.out.println(JSONUtil.toJsonPrettyStr(aggregation));
			}
			
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

分组查询

复制代码
/**
	 * 分组查询
	 *
	 * @param index 索引
	 */
	public static void groupSearch(RestHighLevelClient restHighLevelClient, String index) {
		try {
			//创建索引
			SearchRequest request = new SearchRequest();
			request.indices(index);
			SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
			TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
			searchSourceBuilder.aggregation(termsAggregationBuilder);
			request.source(searchSourceBuilder);
			SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
			System.out.println("------------------------------------------------");
			System.out.println(response.getHits().getTotalHits());
			for (Aggregation aggregation : response.getAggregations()) {
				System.out.println(JSONUtil.toJsonPrettyStr(aggregation));
			}
			
			System.out.println("------------------------------------------------");
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

测试

相关推荐
大大大大晴天3 小时前
每天认识一个组件:数据治理Apache Atlas
大数据
数字新视界3 小时前
2026模块化机房选型指南:行业市场发展趋势、占有率与竞争梯队分析报告解析
大数据·人工智能·物联网·数据中心·微模块机房·模块化机房·冷通道
姜穆澜5 小时前
OneID 从 0 到 1 完整生产案例(四)
大数据
OsDepK5 小时前
项目快速Git至仓库(完整版)
大数据·git·elasticsearch·搜索引擎
合米AI SOP系统6 小时前
传统产线如何快速上马落地 AI 防错?合米科技 AI SOP 7天即可上线。
大数据·人工智能·科技
思录Echo6 小时前
什么决定具身智能的最终走向?多技术路线与落地现实辨析
大数据·人工智能
xiaohaiAIgeo6 小时前
【2026年】AI监控加行为分析守护实验室安全
大数据·人工智能·科普知识
林墨聊AIGC7 小时前
动漫AI视频创作工具在哪找到的?2026年最新动漫AI视频平台与软件指南
大数据·人工智能·ai作画·aigc·音视频
故七月8 小时前
告别 AI 时代品牌 “隐身”:万域智瞰 AI‑GEO,构建品牌大模型时代营销新基建
大数据·人工智能
数字孪生视频孪生10 小时前
三维实时重构异构底座 核工危化无感定位跨境轨迹一屏统揽
大数据·运维·人工智能·重构·架构