es的QueryBuilder学习使用

摘要:
1.pom文件˂?xmlversion=“1.0”encoding=“UTF-8”?

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);
}

模糊、分页、排序查询(对应的排序字段要设置@Field(fielddata = true),有的版本设置不起作用,当时Integer类型有用
/**
     * 模糊、分页、排序查询
     *
     * @param id
     * @param name
     * @param pageindex 页码
     * @param pageSize  每页多少条
     * @return
     */
    public List<Student> getLikeUser( int id,
                                   String name,
                                   int pageindex,
                                   int pageSize) {
        //检索条件
        BoolQueryBuilder bqb = QueryBuilders.boolQuery();
        if (id != 0)
           bqb.must(QueryBuilders.matchPhraseQuery("id", id));
        if (!Strings.isEmpty(name))
            // matchPhraseQuery("name.keyword", name) 不分词,不加keyword可分词,不分词用matchQuery
            bqb.must(QueryBuilders.matchPhraseQuery("name", name));
        //排序条件
        FieldSortBuilder fsb = SortBuilders.fieldSort("age").order(SortOrder.DESC);
        //分页条件
        pageindex = pageindex == 0 ? 1 : pageindex;
        pageSize = pageSize == 0 ? 10 : pageSize;
        Pageable pageable = PageRequest.of(pageindex - 1, pageSize);
        //构建查询
        SearchQuery query = new NativeSearchQueryBuilder()
                .withQuery(bqb)
                .withSort(fsb)
                .withPageable(pageable)
                .build();
        Page<Student> searchResponse = dao.search(query);

        return searchResponse.getContent();
    }
 

免责声明:文章转载自《es的QueryBuilder学习使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nodejs安装、配置及开发工具WinDbg调试分析 asp.net站点 CPU100%问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

微信小程序----返回上一页刷新或当前页刷新

1.Reload()方法刷新当前页面;2.replace()方法刷新当前页面;3.页面自动刷新当前页面;实现js刷新当前页面的三种方法使用微信小程序--返回上一页刷新或当前页面刷新1.在实现效果之前,您需要了解微信小应用程序的页面生命周期。如果你不太清楚,你可以看到微信小程序——页面生命周期;2.我们可以知道微信小程序页面由五个循环组成:onLoad、onR...

安装gulp教程(整理)

所以安装nodejs。...

自定义样式滚动条

自定义IE浏览器滚动条样式追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了。感觉IE浏览器滚动条自定制功能并不是很强,只能控制一样显示各个部分的颜色而已,像宽度,结构等都无法控制,要靠出个性点的滚动条,很难!自定义FireFox浏览器滚动条在网上找了很多关于Firfox自定义浏览器滚动条的方法,发现firefox中却实是不支持的。...

解读阿里官方代码规范

作者将解释此代码规范的一些细节,包括作者的观点和想法,这些可以作为此代码规范扩展。该公众号共发表了五篇文章。这篇文章是一个集合,之前的一些文章已经过修改。在实际的编程过程中,作者可能会对类名的风格更加激进。根据阿里巴巴的规范,类名应该使用UpperCamelCase样式,并且必须遵循驼峰形式。但是,有以下例外:实际上,DO/BO/DTO/VO可能有UserV...

Composer 的下载与安装

检查安装是否成功:使用cmd窗口中的composer--version或composer命令检查安装是否顺利。示例:~1.2需要注意的是,如果~作用于主要版本号,如~1,根据上述声明,Composer可以在版本1之后安装主要版本,但实际上~1将被视为~1.0,只能添加次要版本,而不能添加主要版本。示例:^1.2.3版本稳定性如果您没有明确指定版本稳定性,Co...

deb包制作

简介deb编包的本质是:将编译过程自动化,并生成可执行程序,使得可以通过apt-get中安装。DEB源码介绍DEB包的源码是由:程序源码+debian目录构成,其中debian目录中存放着打包成DEB文件所需的全部文件。通过debian目录中的文件可以定制软件包的行为。修改rules如果要安装二进制等文件,则需要覆写rules-˃dh_installvimd...