广元城乡建设部网站首页,网站建设服务费一年多少钱,品牌网站设计制作公司推荐,洛阳霞光企业网站建设公司ElasticSearch教程入门到精通——第二部分#xff08;基于ELK技术栈elasticsearch 7.x8.x新特性#xff09; 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2… ElasticSearch教程入门到精通——第二部分基于ELK技术栈elasticsearch 7.x8.x新特性 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2 文档——新增3.3 文档——修改3.4 文档——简单操作3.4.1 文档——简单查询3.4.2 文档——简单删除 3.5 文档——批量操作3.5.1 文档——批量新增3.5.2 文档——批量删除 3.6 文档——高级查询3.6.1 文档——高级查询——全量查询3.6.2 文档——高级查询——条件查询3.6.3 文档——高级查询——分页查询3.6.4 文档——高级查询——查询排序3.6.5 文档——高级查询——组合查询3.6.6 文档——高级查询——范围查询3.6.7 文档——高级查询——模糊查询3.6.9 文档——高级查询——高亮查询3.6.10 文档——高级查询——最大值查询3.6.11 文档——高级查询——分组查询 1. JavaAPI-环境准备
1.1 新建Maven工程——添加依赖
dependenciesdependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion7.8.0/version/dependency!-- elasticsearch 的客户端 --dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.8.0/version/dependency!-- elasticsearch 依赖 2.x 的 log4j --dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.8.2/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.8.2/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.9/version/dependency!-- junit 单元测试 --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency
/dependencies1.2 HelloElasticsearch
import java.io.IOException;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;public class HelloElasticsearch {public static void main(String[] args) throws IOException {// 创建客户端对象RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));
// ...System.out.println(client);// 关闭客户端连接client.close();}
}2. 索引
2.1 索引——创建 import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;import java.io.IOException;public class ESTest_Index_Create {public static void main(String[] args) throws IOException {RestHighLevelClient restHighLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost(localhost,9200,http)));// 创建索引CreateIndexRequest createIndexRequest new CreateIndexRequest(user);CreateIndexResponse createIndexResponse restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);boolean acknowledged createIndexResponse.isAcknowledged();System.out.println(acknowledged acknowledged);restHighLevelClient.close();}
}后台打印 2.2 索引——查询
package com.atguigu.es.test;import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.cluster.metadata.AliasMetadata;
import org.elasticsearch.cluster.metadata.MappingMetadata;
import org.elasticsearch.common.settings.Settings;import java.io.IOException;
import java.util.List;
import java.util.Map;public class ESTest_Index_Search {public static void main(String[] args) throws IOException {RestHighLevelClient restHighLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost(localhost,9200,http)));// 查询索引GetIndexRequest getIndexRequest new GetIndexRequest(user);GetIndexResponse getIndexResponse restHighLevelClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);MapString, ListAliasMetadata aliases getIndexResponse.getAliases();System.out.println(aliases aliases);MapString, MappingMetadata mappings getIndexResponse.getMappings();System.out.println(mappings mappings);MapString, Settings settings getIndexResponse.getSettings();System.out.println(settings settings);restHighLevelClient.close();}
}后台打印 2.3 索引——删除
package com.atguigu.es.test;import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import org.elasticsearch.cluster.metadata.AliasMetadata;
import org.elasticsearch.cluster.metadata.MappingMetadata;
import org.elasticsearch.common.settings.Settings;import java.io.IOException;
import java.util.List;
import java.util.Map;public class ESTest_Index_Delete {public static void main(String[] args) throws IOException {RestHighLevelClient restHighLevelClient new RestHighLevelClient(RestClient.builder(new HttpHost(localhost,9200,http)));// 删除索引DeleteIndexRequest deleteIndexRequest new DeleteIndexRequest(user);AcknowledgedResponse delete restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);boolean acknowledged delete.isAcknowledged();System.out.println(acknowledged acknowledged);restHighLevelClient.close();}
}后台打印 3. 文档
3.1 文档——重构
上文由于频繁使用以下连接Elasticsearch和关闭它的代码于是个人对它进行重构。
public class SomeClass {public static void main(String[] args) throws IOException {RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));...client.close();}
}重构后的代码
import org.elasticsearch.client.RestHighLevelClient;public interface ElasticsearchTask {void doSomething(RestHighLevelClient client) throws Exception;}public class ConnectElasticsearch{public static void connect(ElasticsearchTask task){// 创建客户端对象RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));try {task.doSomething(client);// 关闭客户端连接client.close();} catch (Exception e) {e.printStackTrace();}}
}接下来如果想让Elasticsearch完成一些操作就编写一个lambda式即可。
public class SomeClass {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//do something});}
}3.2 文档——新增
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.model.User;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;public class InsertDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {// 新增文档 - 请求对象IndexRequest request new IndexRequest();// 设置索引及唯一性标识request.index(user).id(1001);// 创建数据对象User user new User();user.setName(zhangsan);user.setAge(30);user.setSex(男);ObjectMapper objectMapper new ObjectMapper();String productJson objectMapper.writeValueAsString(user);// 添加文档数据数据格式为 JSON 格式request.source(productJson, XContentType.JSON);// 客户端发送请求获取响应对象IndexResponse response client.index(request, RequestOptions.DEFAULT);3.打印结果信息System.out.println(_index: response.getIndex());System.out.println(_id: response.getId());System.out.println(_result: response.getResult());});}
}后台打印 3.3 文档——修改
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;public class UpdateDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {// 修改文档 - 请求对象UpdateRequest request new UpdateRequest();// 配置修改参数request.index(user).id(1001);// 设置请求体对数据进行修改request.doc(XContentType.JSON, sex, 女);// 客户端发送请求获取响应对象UpdateResponse response client.update(request, RequestOptions.DEFAULT);System.out.println(_index: response.getIndex());System.out.println(_id: response.getId());System.out.println(_result: response.getResult());});}}后台打印
_index:user
_id:1001
_result:UPDATEDProcess finished with exit code 03.4 文档——简单操作
3.4.1 文档——简单查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;public class GetDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//1.创建请求对象GetRequest request new GetRequest().index(user).id(1001);//2.客户端发送请求获取响应对象GetResponse response client.get(request, RequestOptions.DEFAULT);3.打印结果信息System.out.println(_index: response.getIndex());System.out.println(_type: response.getType());System.out.println(_id: response.getId());System.out.println(source: response.getSourceAsString());});}
}后台打印
_index:user
_type:_doc
_id:1001
source:{name:zhangsan,age:30,sex:男}Process finished with exit code 03.4.2 文档——简单删除
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;public class DeleteDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//创建请求对象DeleteRequest request new DeleteRequest().index(user).id(1001);//客户端发送请求获取响应对象DeleteResponse response client.delete(request, RequestOptions.DEFAULT);//打印信息System.out.println(response.toString());});}
}后台打印
DeleteResponse[indexuser,type_doc,id1001,version16,resultdeleted,shardsShardInfo{total2, successful1, failures[]}]Process finished with exit code 03.5 文档——批量操作
3.5.1 文档——批量新增
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;public class BatchInsertDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//创建批量新增请求对象BulkRequest request new BulkRequest();request.add(newIndexRequest().index(user).id(1001).source(XContentType.JSON, name,zhangsan));request.add(newIndexRequest().index(user).id(1002).source(XContentType.JSON, name,lisi));request.add(newIndexRequest().index(user).id(1003).source(XContentType.JSON, name,wangwu));//客户端发送请求获取响应对象BulkResponse responses client.bulk(request, RequestOptions.DEFAULT);//打印结果信息System.out.println(took: responses.getTook());System.out.println(items: responses.getItems());});}
}后台打印
took:294ms
items:[Lorg.elasticsearch.action.bulk.BulkItemResponse;2beee7ffProcess finished with exit code 03.5.2 文档——批量删除
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.client.RequestOptions;public class BatchDeleteDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//创建批量删除请求对象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 responses client.bulk(request, RequestOptions.DEFAULT);//打印结果信息System.out.println(took: responses.getTook());System.out.println(items: responses.getItems());});}
}后台打印
took:108ms
items:[Lorg.elasticsearch.action.bulk.BulkItemResponse;7b02881eProcess finished with exit code 03.6 文档——高级查询
3.6.1 文档——高级查询——全量查询
先批量增加数据
public class BatchInsertDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {//创建批量新增请求对象BulkRequest request new BulkRequest();request.add(new IndexRequest().index(user).id(1001).source(XContentType.JSON, name, zhangsan, age, 10, sex,女));request.add(new IndexRequest().index(user).id(1002).source(XContentType.JSON, name, lisi, age, 30, sex,女));request.add(new IndexRequest().index(user).id(1003).source(XContentType.JSON, name, wangwu1, age, 40, sex,男));request.add(new IndexRequest().index(user).id(1004).source(XContentType.JSON, name, wangwu2, age, 20, sex,女));request.add(new IndexRequest().index(user).id(1005).source(XContentType.JSON, name, wangwu3, age, 50, sex,男));request.add(new IndexRequest().index(user).id(1006).source(XContentType.JSON, name, wangwu4, age, 20, sex,男));//客户端发送请求获取响应对象BulkResponse responses client.bulk(request, RequestOptions.DEFAULT);//打印结果信息System.out.println(took: responses.getTook());System.out.println(items: responses.getItems());});}
}后台打印
took:168ms
items:[Lorg.elasticsearch.action.bulk.BulkItemResponse;2beee7ffProcess finished with exit code 0查询所有索引数据
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;public class QueryDoc {public static void main(String[] args) {ConnectElasticsearch.connect(client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();// 查询所有数据sourceBuilder.query(QueryBuilders.matchAllQuery());request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();});}}后台打印
took:2ms
timeout:false
total:6 hits
MaxScore:1.0
hits
{name:zhangsan,age:10,sex:女}
{name:lisi,age:30,sex:女}
{name:wangwu1,age:40,sex:男}
{name:wangwu2,age:20,sex:女}
{name:wangwu3,age:50,sex:男}
{name:wangwu4,age:20,sex:男}
Process finished with exit code 03.6.2 文档——高级查询——条件查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_BY_CONDITION client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.termQuery(age, 30));request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_BY_CONDITION);}
}后台打印
took:1ms
timeout:false
total:1 hits
MaxScore:1.0
hits
{name:lisi,age:30,sex:女}3.6.3 文档——高级查询——分页查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_BY_PAGING client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.matchAllQuery());// 分页查询// 当前页其实索引(第一条数据的顺序号) fromsourceBuilder.from(0);// 每页显示多少条 sizesourceBuilder.size(2);request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_BY_CONDITION);}}后台打印
took:1ms
timeout:false
total:6 hits
MaxScore:1.0
hits
{name:zhangsan,age:10,sex:女}
{name:lisi,age:30,sex:女}3.6.4 文档——高级查询——查询排序
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_WITH_ORDER client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.matchAllQuery());// 排序sourceBuilder.sort(age, SortOrder.ASC);request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_WITH_ORDER);}}后台打印
took:1ms
timeout:false
total:6 hits
MaxScore:NaN
hits
{name:zhangsan,age:10,sex:女}
{name:wangwu2,age:20,sex:女}
{name:wangwu4,age:20,sex:男}
{name:lisi,age:30,sex:女}
{name:wangwu1,age:40,sex:男}
{name:wangwu3,age:50,sex:男}3.6.5 文档——高级查询——组合查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_BY_BOOL_CONDITION client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();BoolQueryBuilder boolQueryBuilder QueryBuilders.boolQuery();// 必须包含boolQueryBuilder.must(QueryBuilders.matchQuery(age, 30));// 一定不含boolQueryBuilder.mustNot(QueryBuilders.matchQuery(name, zhangsan));// 可能包含boolQueryBuilder.should(QueryBuilders.matchQuery(sex, 男));sourceBuilder.query(boolQueryBuilder);request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_BY_BOOL_CONDITION);}
}后台打印
took:28ms
timeout:false
total:1 hits
MaxScore:1.0
hits
{name:lisi,age:30,sex:女}
Process finished with exit code 03.6.6 文档——高级查询——范围查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_BY_RANGE client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();RangeQueryBuilder rangeQuery QueryBuilders.rangeQuery(age);// 大于等于//rangeQuery.gte(30);// 小于等于rangeQuery.lte(40);sourceBuilder.query(rangeQuery);request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_BY_RANGE);}}后台打印
took:1ms
timeout:false
total:5 hits
MaxScore:1.0
hits
{name:zhangsan,age:10,sex:女}
{name:lisi,age:30,sex:女}
{name:wangwu1,age:40,sex:男}
{name:wangwu2,age:20,sex:女}
{name:wangwu4,age:20,sex:男}
Process finished with exit code 03.6.7 文档——高级查询——模糊查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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;public class QueryDoc {public static final ElasticsearchTask SEARCH_BY_FUZZY_CONDITION client - {// 创建搜索请求对象SearchRequest request new SearchRequest();request.indices(user);// 构建查询的请求体SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.fuzzyQuery(name,wangwu).fuzziness(Fuzziness.ONE));request.source(sourceBuilder);SearchResponse response client.search(request, RequestOptions.DEFAULT);// 查询匹配SearchHits hits response.getHits();System.out.println(took: response.getTook());System.out.println(timeout: response.isTimedOut());System.out.println(total: hits.getTotalHits());System.out.println(MaxScore: hits.getMaxScore());System.out.println(hits);for (SearchHit hit : hits) {//输出每条查询的结果信息System.out.println(hit.getSourceAsString());}System.out.println();};public static void main(String[] args) {
// ConnectElasticsearch.connect(SEARCH_ALL);
// ConnectElasticsearch.connect(SEARCH_BY_CONDITION);
// ConnectElasticsearch.connect(SEARCH_BY_PAGING);
// ConnectElasticsearch.connect(SEARCH_WITH_ORDER);
// ConnectElasticsearch.connect(SEARCH_BY_BOOL_CONDITION);
// ConnectElasticsearch.connect(SEARCH_BY_RANGE);ConnectElasticsearch.connect(SEARCH_BY_FUZZY_CONDITION);}}后台打印
took:152ms
timeout:false
total:4 hits
MaxScore:1.2837042
hits
{name:wangwu1,age:40,sex:男}
{name:wangwu2,age:20,sex:女}
{name:wangwu3,age:50,sex:男}
{name:wangwu4,age:20,sex:男}
Process finished with exit code 03.6.9 文档——高级查询——高亮查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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.index.query.TermsQueryBuilder;
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 org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;import java.util.Map;public class QueryDoc {public static final ElasticsearchTask SEARCH_WITH_HIGHLIGHT client - {// 高亮查询SearchRequest request new SearchRequest().indices(user);//2.创建查询请求体构建器SearchSourceBuilder sourceBuilder new SearchSourceBuilder();//构建查询方式高亮查询TermsQueryBuilder termsQueryBuilder QueryBuilders.termsQuery(name,zhangsan);//设置查询方式sourceBuilder.query(termsQueryBuilder);//构建高亮字段HighlightBuilder highlightBuilder new HighlightBuilder();highlightBuilder.preTags(font colorred);//设置标签前缀highlightBuilder.postTags(/font);//设置标签后缀highlightBuilder.field(name);//设置高亮字段//设置高亮构建对象sourceBuilder.highlighter(highlightBuilder);//设置请求体request.source(sourceBuilder);//3.客户端发送请求获取响应对象SearchResponse response client.search(request, RequestOptions.DEFAULT);//4.打印响应结果SearchHits hits response.getHits();System.out.println(took::response.getTook());System.out.println(time_out::response.isTimedOut());System.out.println(total::hits.getTotalHits());System.out.println(max_score::hits.getMaxScore());System.out.println(hits::::);for (SearchHit hit : hits) {String sourceAsString hit.getSourceAsString();System.out.println(sourceAsString);//打印高亮结果MapString, HighlightField highlightFields hit.getHighlightFields();System.out.println(highlightFields);}System.out.println(::::);};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_WITH_HIGHLIGHT);}}后台打印
took::672ms
time_out::false
total::1 hits
max_score::1.0
hits::::
{name:zhangsan,age:10,sex:女}
{name[name], fragments[[font colorredzhangsan/font]]}
::::Process finished with exit code 0
123456789103.6.10 文档——高级查询——最大值查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;import java.util.Map;public class QueryDoc {public static final ElasticsearchTask SEARCH_WITH_MAX client - {// 高亮查询SearchRequest request new SearchRequest().indices(user);SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.aggregation(AggregationBuilders.max(maxAge).field(age));//设置请求体request.source(sourceBuilder);//3.客户端发送请求获取响应对象SearchResponse response client.search(request, RequestOptions.DEFAULT);//4.打印响应结果SearchHits hits response.getHits();System.out.println(response);};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_WITH_MAX);}}后台打印
{took:16,timed_out:false,_shards:{total:1,successful:1,skipped:0,failed:0},hits:{total:{value:6,relation:eq},max_score:1.0,hits:[{_index:user,_type:_doc,_id:1001,_score:1.0,_source:{name:zhangsan,age:10,sex:女}},{_index:user,_type:_doc,_id:1002,_score:1.0,_source:{name:lisi,age:30,sex:女}},{_index:user,_type:_doc,_id:1003,_score:1.0,_source:{name:wangwu1,age:40,sex:男}},{_index:user,_type:_doc,_id:1004,_score:1.0,_source:{name:wangwu2,age:20,sex:女}},{_index:user,_type:_doc,_id:1005,_score:1.0,_source:{name:wangwu3,age:50,sex:男}},{_index:user,_type:_doc,_id:1006,_score:1.0,_source:{name:wangwu4,age:20,sex:男}}]},aggregations:{max#maxAge:{value:50.0}}}Process finished with exit code 03.6.11 文档——高级查询——分组查询
import com.lun.elasticsearch.hello.ConnectElasticsearch;
import com.lun.elasticsearch.hello.ElasticsearchTask;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
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.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;import java.util.Map;public class QueryDoc {public static final ElasticsearchTask SEARCH_WITH_GROUP client - {SearchRequest request new SearchRequest().indices(user);SearchSourceBuilder sourceBuilder new SearchSourceBuilder();sourceBuilder.aggregation(AggregationBuilders.terms(age_groupby).field(age));//设置请求体request.source(sourceBuilder);//3.客户端发送请求获取响应对象SearchResponse response client.search(request, RequestOptions.DEFAULT);//4.打印响应结果SearchHits hits response.getHits();System.out.println(response);};public static void main(String[] args) {ConnectElasticsearch.connect(SEARCH_WITH_GROUP);}}后台打印
{took:10,timed_out:false,_shards:{total:1,successful:1,skipped:0,failed:0},hits:{total:{value:6,relation:eq},max_score:1.0,hits:[{_index:user,_type:_doc,_id:1001,_score:1.0,_source:{name:zhangsan,age:10,sex:女}},{_index:user,_type:_doc,_id:1002,_score:1.0,_source:{name:lisi,age:30,sex:女}},{_index:user,_type:_doc,_id:1003,_score:1.0,_source:{name:wangwu1,age:40,sex:男}},{_index:user,_type:_doc,_id:1004,_score:1.0,_source:{name:wangwu2,age:20,sex:女}},{_index:user,_type:_doc,_id:1005,_score:1.0,_source:{name:wangwu3,age:50,sex:男}},{_index:user,_type:_doc,_id:1006,_score:1.0,_source:{name:wangwu4,age:20,sex:男}}]},aggregations:{lterms#age_groupby:{doc_count_error_upper_bound:0,sum_other_doc_count:0,buckets:[{key:20,doc_count:2},{key:10,doc_count:1},{key:30,doc_count:1},{key:40,doc_count:1},{key:50,doc_count:1}]}}}Process finished with exit code 0