分页查询是在查询体内设置查询的当前位置与每页显示条数:
{ "query":{ "match_all":{//全库查询 } }, "from": 0,//查询从当前位置开始 "size": 2 //每页显示2条数据 } |
{ "query":{//查询操作 "match_all":{//全库查询 } }, "from": 0,//查询起始位置 "size": 2,//每页显示条数 "_source":["title","kinds"] //指定显示的列 } |
3.8 查询排序
{ "query":{ "match_all":{ } }, "from": 0, "size": 3, "sort":{//排序 "price":{//排序列 "order":"desc"//排序方式 } } } |
- 全文检索
ES将存入的文档进行分词操作,然后将其存入到倒排索引中,检索是根据倒排索引内的关键字匹配文档。
如果在查询时,向完全匹配查询的结果,那么条件中的match关键字应换为match_phrase
4.1高亮显示的设置
如果想将查询结果中的某些列高亮显示,需要进行如下设置:
高亮结果设置: |
- 聚合操作
聚合操作使用aggs进行
分组操作请求正文: { "aggs": { //聚合操作 "price_group": { //名称,自定义 "term": { //分组 "field": "price" //分组字段 } } } } 以上方式会显示具体数据,如果不想显示具体数据可设置具体数据不显示 |
|
常见的聚合函数:
标识 |
名称 |
用途 |
terms |
分组 |
对查询数据进行分组操作 |
avg |
求平均值 |
对查询数据求平均值 |
sum |
求和 |
对查询数据进行求和处理 |
- 映射关系
映射关系,主要用于ES控制是否需要分词等属性设置。映射关系的设置,通过请求正文中的properties属性设置
映射关系设置: |
|
执行结果: mapping中设置的信息可以使用Get查看 |
|
标识 |
名称 |
用途 |
值介绍 |
示例 |
index |
表示是否能够被索引查询 |
设置是否能够作为查询条件查询 |
true:能被索引查询 false:不能被索引查询 |
例如:如果设置了name不能被索引查询那么如果name作为查询条件,是不能够查询到数据的 |
type |
类型 |
如果某一列被设置了不能被分词,那么这一列如果作为查询条件时,需要全匹配 |
text:文本,可以被分词 keywords:不能被分词 |
例如:name设置了不可分词,那么查询时,需要使用全的名称来进行查询。比如张三,如果不支持分词需要使用完整的“张三”查询,而“张”则不被支持 |
- JAVA与ES实现
添加依赖:
<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.17.6</version> </dependency> <!-- elasticsearch客户端--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.17.6</version> </dependency> <!-- elasticsearch依赖log4j--> <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> <!-- jackson-databind--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version> 2.13.3</version> </dependency> <!-- 单元测试--> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> </dependencies> |
7.1 连接ES
//创建elasticsearch客户端 RestHighLevelClient restHighLevelClient = new RestHighLevelClient( RestClient.builder( new HttpHost(URL,PORT,"http"))); //关闭连接客户端 restHighLevelClient.close(); |
7.2 indices() .create方法创建索引创建索引
封装连接
public class EsConn { private static final String URL="124.71.74.18"; private static final int PORT=9200; public static RestHighLevelClient getConnection(){ //创建elasticsearch客户端 RestHighLevelClient restHighLevelClient = new RestHighLevelClient( RestClient.builder( new HttpHost(URL,PORT,"http"))); return restHighLevelClient; } } |
以下所有示例均使用封装的工具类获取连接对象
使用indices() .create创建索引 |
RestHighLevelClient connection = EsConn.getConnection();//获取连接对象 //获取创建索引请求对象 CreateIndexRequest indexRequest = new CreateIndexRequest("sys_user");//创建一个创建索引请求对象 CreateIndexResponse response = connection .indices() .create(indexRequest, RequestOptions.DEFAULT);//创建索引,RequestOptions为默认选项 boolean acknowledged = response.isAcknowledged();//响应状态,创建成功会返回true //关闭连接客户端 restHighLevelClient.close(); |
7.3 indices().delete方法删除索引
使用indices().delete方法删除索引 |
RestHighLevelClient connection = EsConn.getConnection(); //创建请求对象 DeleteIndexRequest sys_user = new DeleteIndexRequest("sys_user"); // AcknowledgedResponse delete = connection.indices().delete(sys_user, RequestOptions.DEFAULT); boolean acknowledged = delete.isAcknowledged();//获取响应结果,删除成功返回true //关闭连接客户端 restHighLevelClient.close(); |
7.4 indices().get方法查询索引
使用indices()对象的get方法获取索引 |
RestHighLevelClient connection = EsConn.getConnection(); //创建一个获取索引的对象 GetIndexRequest getIndexRequest = new GetIndexRequest("user"); GetIndexResponse response = connection .indices() .get(getIndexRequest, RequestOptions.DEFAULT); System.out.println(response.getAliases());//别名操作 System.out.println(response.getDataStreams()); System.out.println(response.getIndices()); System.out.println(response.getDefaultSettings()); System.out.println(response.getMappings()); System.out.println(response.getSettings()); connection.close(); |