文章目录
1. 依赖引入及ES客户端配置
1.1 依赖引入
- 1. 依赖引入及ES客户端配置
- 1.1 依赖引入
- 2. 索引API操作
- 2.1 创建索引
- 2.2 查询索引
- 2.3 删除索引
- 3.1 文档插入
- 3.2 文档批量插入
- 3.3 单个文档查询
- 3.4 文档搜索
- 3.5 文档更新
- 3.6 文档删除
- 3.7 文档批量删除
- 4. 高级查询
- 4.1 索引全部数据查询
- 4.2 条件查询
- 4.3 分页查询
- 4.4 查询排序
- 4.5 过滤字段
- 4.6 组合查询
- 4.7 范围查询
- 4.8 模糊查询
- 4.9 .高亮查询
- 4.10 聚合查询
- 4.11 分组查询
org.elasticsearch
elasticsearch
7.8.0
org.elasticsearch.client
elasticsearch-rest-high-level-client
7.8.0
com.fasterxml.jackson.core
jackson-databind
2.13.1
jackson-databind版本过低会报错
@Configuration
public class ESConfiguration {
@Bean
RestHighLevelClient client() {
RestClientBuilder builder = RestClient.builder(new HttpHost("127.0.0.1", 9200,"http"));
return new RestHighLevelClient(builder);
}
}
这里使用RestHighLevelClient
客户端操作ES
,9200
端口为 ES
的 Web
通信端口,localhost
为启动 ES
服务的主机名
public void createIndex() {
// 创建索引 - 请求对象
CreateIndexRequest request = new CreateIndexRequest("user");
CreateIndexResponse createIndexResponse = null;
try {
// 发送请求,获取响应
createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
// 响应状态
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println("索引操作 :" + acknowledged);
}
2.2 查询索引
public void searchIndex() {
// 查询索引 - 请求对象
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse getIndexResponse = null;
try {
// 发送请求,获取响应
getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
// 响应状态
System.out.println(getIndexResponse.getAliases());
System.out.println(getIndexResponse.getMappings());
System.out.println(getIndexResponse.getSettings());
}
2.3 删除索引
public void deleteIndex() {
// 删除索引 - 请求对象
DeleteIndexRequest request = new DeleteIndexRequest("user");
AcknowledgedResponse response = null;
try {
// 发送请求,获取响应
response = client.indices().delete(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
// 响应状态
System.out.println(response.isAcknowledged());
}
#3. 文档API操作
3.1 文档插入public void insertDocument() {
// 插入数据
IndexRequest request = new IndexRequest();
// 设置索引及唯一标识
request.index("user").id("1001");
User user = new User();
user.setName("scorpios");
user.setAge(30);
user.setSex("男");
// 向ES插入数据,必须将数据转换位JSON格式
ObjectMapper mapper = new ObjectMapper();
String userJson = null;
try {
userJson = mapper.writeValueAsString(user);
// 添加文档数据,数据格式为 JSON 格式
request.source(userJson, XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
3.2 文档批量插入
public void insertBatchDocument() {
// 批量插入数据
BulkRequest request = new BulkRequest();
request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "Kobe", "age",30,"sex","男"));
request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "Allen", "age",30,"sex","女"));
request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "Howard", "age",40,"sex","男"));
request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "Carter", "age",40,"sex","女"));
request.add(new IndexRequest().index("user").id("1005").source(XContentType.JSON, "name", "Anthony", "age",50,"sex","男"));
request.add(new IndexRequest().index("user").id("1006").source(XContentType.JSON, "name", "Wade", "age",50,"sex","男"));
request.add(new IndexRequest().index("user").id("1007").source(XContentType.JSON, "name", "jordan", "age",60,"sex","男"));
request.add(new IndexRequest().index("user").id("1008").source(XContentType.JSON, "name", "jordan1", "age",60,"sex","男"));
request.add(new IndexRequest().index("user").id("1009").source(XContentType.JSON, "name", "jordan22", "age",60,"sex","男"));
request.add(new IndexRequest().index("user").id("1010").source(XContentType.JSON, "name", "jordan333", "age",60,"sex","男"));
request.add(new IndexRequest().index("user").id("1011").source(XContentType.JSON, "name", "jordan4444", "age",60,"sex","男"));
BulkResponse response = null;
try {
// 客户端发送请求,获取响应对象
response = client.bulk(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.getTook());
System.out.println(response.getItems());
}
3.3 单个文档查询
public void getDocument() {
// 查询数据
GetRequest request = new GetRequest();
request.index("user").id("1001");
GetResponse response = null;
try {
response = client.get(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.getSourceAsString());
}
3.4 文档搜索
public void queryDocument() {
// 1. 查询索引的所有数据
SearchRequest request = new SearchRequest();
request.indices("user");
// 构造查询条件
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchAllQuery());
request.source(builder);
SearchResponse response = null;
try {
response = client.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
SearchHits hits = response.getHits();
System.out.println(response.getTook());
System.out.println(hits.getTotalHits());
Iterator iterator = hits.iterator();
while (iterator.hasNext()) {
SearchHit hit = iterator.next();
System.out.println(hit.getSourceAsString());
}
}
3.5 文档更新
public void updateDocument() {
// 修改数据
UpdateRequest request = new UpdateRequest();
request.index("user").id("1001");
// 设置请求体,对数据进行修改
request.doc(XContentType.JSON, "sex", "女");
UpdateResponse response = null;
try {
response = client.update(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.getResult());
}
3.6 文档删除
public void deleteDocument() {
DeleteRequest request = new DeleteRequest();
request.index("user").id("1001");
DeleteResponse response = null;
try {
response = client.delete(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.toString());
}
3.7 文档批量删除
public void deleteBatchDocument() {
// 批量删除数据
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("user").id("1001"));
request.add(new DeleteRequest().index("user").id("1002"));
request.add(new DeleteRequest().index("user").id("1003"));
BulkResponse response = null;
try {
response = client.bulk(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(response.getTook());
System.out.println(response.getItems());
}
4. 高级查询
4.1 索引全部数据查询
public void queryAll(){
// 查询对象
SearchRequest request = new SearchRequest();
// 查询索引
request.indices("user");
// 构建查询条件
request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
// 查询结果
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.2 条件查询
public void queryTerm(){
SearchRequest request = new SearchRequest();
request.indices("user");
request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("age", 30)));
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.3 分页查询
public void queryPage(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// (当前页码-1)*每页显示数据条数
builder.from(2);
builder.size(2);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.4 查询排序
public void querySort(){
SearchRequest request = new SearchRequest();
request.indices("user");
// 查询条件
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
builder.sort("age", SortOrder.DESC);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.5 过滤字段
public void queryFetchSource(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
String[] excludes = {"age"};
String[] includes = {};
builder.fetchSource(includes, excludes);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.6 组合查询
public void query(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
// boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));
// boolQueryBuilder.mustNot(QueryBuilders.matchQuery("sex", "男"));
boolQueryBuilder.should(QueryBuilders.matchQuery("age", 30));
boolQueryBuilder.should(QueryBuilders.matchQuery("age", 40));
builder.query(boolQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.7 范围查询
public void queryRange(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
rangeQuery.gte(30);
rangeQuery.lt(50);
builder.query(rangeQuery);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.8 模糊查询
public void queryFuzzy(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.TWO));
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.9 .高亮查询
public void queryHighlight(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "zhangsan");
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("");
highlightBuilder.postTags("");
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
builder.query(termsQueryBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.10 聚合查询
public void queryAggregation(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.max("maxAge").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}
4.11 分组查询
public void queryGroup(){
SearchRequest request = new SearchRequest();
request.indices("user");
SearchSourceBuilder builder = new SearchSourceBuilder();
AggregationBuilder aggregationBuilder = AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(aggregationBuilder);
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println(hits.getTotalHits());
System.out.println(response.getTook());
for ( SearchHit hit : hits ) {
System.out.println(hit.getSourceAsString());
}
}