es的QueryBuilder学习使用
Posted 动力起点
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es的QueryBuilder学习使用相关的知识,希望对你有一定的参考价值。
1.pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>elasticsearch</artifactId> <version>0.0.1-SNAPSHOT</version> <name>elasticsearch</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.application.yml
spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300
cluster-name: elasticsearch
repositories:
enabled: true
3.测试代码
1.bean层 @Data @AllArgsConstructor @NoArgsConstructor @Document(indexName = "student",type = "_doc") public class Student { @Id private Integer id; @Field(type = FieldType.Keyword) private String name; @Field(fielddata = true) private String age; } 2.must的是使用(must是必须包含的) BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); // 不会对搜索词进行分词处理,而是作为一个整体与目标字段进行匹配,若完全匹配,则可查询到 boolQueryBuilder.must(QueryBuilders.termQuery("name.keyword","胡琪")); Iterable<Student> list = dao.search(boolQueryBuilder); for(Student s:list){ System.out.println(s); }
3.mustNot的使用(mustMot不能包含的查询条件)
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// mustNot QueryBuilders.termQuery()在这其中的分词数据需要排除,name.keyword完全匹配
boolQueryBuilder.mustNot(QueryBuilders.termQuery("name.keyword","胡琪"));
Iterable<Student> list = dao.search(boolQueryBuilder);
for(Student s:list){
System.out.println(s);
}
3.QueryBuilders.wildcardQuery对分词进行模糊匹配
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// QueryBuilders.wildcardQuery对分词进行模糊匹配
boolQueryBuilder.must(QueryBuilders.wildcardQuery("name","*胡*"));
Iterable<Student> list = dao.search(boolQueryBuilder);
for(Student s:list){
System.out.println(s);
}
4.RangeQueryBuilder范围查询,对age进行范围查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.wildcardQuery("name","*漫*"));
// RangeQueryBuilder范围查询,对age进行范围查询
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
rangeQueryBuilder.gte(12);
rangeQueryBuilder.lte(12);
boolQueryBuilder.must(rangeQueryBuilder);
Iterable<Student> list = dao.search(boolQueryBuilder);
for(Student s:list){
System.out.println(s);
}
以上是关于es的QueryBuilder学习使用的主要内容,如果未能解决你的问题,请参考以下文章