ES Day 03
文章总结自B站狂神说Java
1. 花式查询
1.1传递参数查询
查询的参数体是一个JSON数据,封装到query对象里面。
调用_search方法执行查询,传入query对象;match为匹配查询;sort设置排序方式;_source用来添加要显示的字段(es中为文档)
GET newindex/_search
{
"query": {
"match": {
"name": "梁朝伟"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": ["name"]
}
1.2分页查询
form为从第几条开始,size为每次显示几个。
GET newindex/_search
{
"query": {
"match": {
"name": "梁朝伟"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": ["name"],
"form": 0,
"size": 2,
}
1.3 多条件查询
must的用法相当于MySQL中的and(查询必须名字为梁朝伟以及年龄为1岁);也可以使用must_not进行取反,就是查询与关键字不同的。多个相同字段的条件使用空格隔开。
GET newindex/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "梁朝伟"
}
},
{
"match": {
"age": "1"
}
}
]
}
}
}
should相当于MySQL中的or
查询名字为梁朝伟或者年龄为1岁
GET newindex/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "梁朝伟"
}
},
{
"match": {
"age": "1"
}
}
]
}
}
}
1.4过滤器
使用filter进行过滤,
lt 小于
lte 小于等于
gt 大于
gte 大于等于
GET newindex/_search
{
"query": {
”match": {
"name": "梁朝伟"
},
"filter": {
”range":{
"age": {
"lt": 10
}
}
}
}
}
1.5精确查找
term直接查询精确的,match会使用分词器解析
1.6 高亮查询
"highlight": {
"pre_tags": "<p style = "color:red">"
"post_tags:"</p>
"fields": {
"colum": {}
}
}
2. SpringBoot整合ES
整合时要注意的是要将maven依赖中的es依赖版本与本地es客户端的版本一致。springboot2.5.x的默认版本是es6.8.x需要将es的版本修改
指定es依赖版本
<elasticsearch.version>7.6.1</elasticsearch.version>
es依赖,在使用idea创建springboot项目时在nosql中选上es也可以添加。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
2.1配置Es
@Configuration
public class ElasticSearchClientConfig {
@Bean
public RestHighLevelClient restHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("127.0.0.1",9200,"http")));
return client;
}
}
2.2 操作索引
2.2.1 创建索引
/**
* 创建索引
*/
@Test
void testCreateIndex() throws IOException {
// 创建索引请求
CreateIndexRequest request = new CreateIndexRequest("java");
// // 执行请求
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
}
2.2.2 获取索引
/**
* 获取索引
*/
@Test
void testGetIndex() throws IOException {
// 创建获取索引请求
GetIndexRequest getIndexRequest = new GetIndexRequest("java");
// 发送获取索引请求
boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
System.out.println(exists);
}
2.2.3 删除索引
/**
* 删除索引
*/
@Test
void testDelIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("java");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
System.out.println(delete);
}
2.3 操作文档
2.3.1新建实体类:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class User {
private String user;
private Integer age;
}
2.3.2 新建文档
/**
* 添加文档
*/
@Test
void testAddDocument() throws IOException {
// 创建对象
User user = new User("梁朝伟",29);
// 创建请求
IndexRequest request = new IndexRequest("es_api");
// 创建规则
request.id("1");
request.timeout(TimeValue.timeValueSeconds(1));
// 将数据转为json
IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);
// 发送请求
IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
System.out.println(index.toString());
}
2.3.3 获取文档
/**
* 获取文档
*/
@Test
void testGetDocument() throws IOException {
GetRequest request = new GetRequest("es_api","1");
GetResponse getRequest = restHighLevelClient.get(request, RequestOptions.DEFAULT);
System.out.println(getRequest.getSourceAsString());
}
2.3.4 更新文档
/**
* 更新文档
*/
@Test
void testUpdateDocument() throws IOException {
UpdateRequest request = new UpdateRequest("es_api","_doc","1");
request.timeout("1s");
User user = new User("吴彦祖",22);
request.doc(JSON.toJSONString(user),XContentType.JSON);
UpdateResponse update = restHighLevelClient.update(request,RequestOptions.DEFAULT);
System.out.println(update);
}
2.3.5 删除文档
/**
* 删除文档
*/
@Test
void testDelDocument() throws IOException {
DeleteRequest request = new DeleteRequest("es_api","1");
request.timeout("1s");
DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
System.out.println(delete);
}
2.3.5 条件查询
/**
* 条件查询
*/
@Test
void testSearchDocument() throws IOException {
SearchRequest request = new SearchRequest("es_api");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name","jiji");
sourceBuilder.query(termQueryBuilder);
sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
request.source(sourceBuilder);
SearchResponse search = restHighLevelClient.search(request,RequestOptions.DEFAULT);
System.out.println(JSON.toJSONString(search.getHits()));
}