小工具      在线工具  汉语词典  css  js  c++  java

BoolQueryBuilder 和 wildcardQuery withFilter 查询

Java,java 额外说明

收录于:42天前

一。BoolQueryBuilder查询说明

BoolQueryBuilder qb = QueryBuilders.boolQuery();

1. 返回的文档必须满足must子句的条件,并且参与计算分值

qb.must(QueryBuilder queryBuilder);

2. 退回的文件必须不符合规定的条件

qb.mustNot(QueryBuilder queryBuilder)

3. 返回的文档可能满足should子句的条件.在一个bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回.minimum_should_match参数定义了至少满足几个子句.

qb.should(QueryBuilder queryBuilder))

4. 返回的文档必须满足filter子句的条件,但是不会像must一样,参与计算分值

qb.filter(QueryBuilder queryBuilder))

2. 示例

1.使用BoolQueryBuilder必须实现精准搜索

    /**
     * must,should查找
     * @param keyword
     * @return
     */
    @GetMapping("/blog/search/title")
    public JsonResult<List<BlogModel>> searchTitle(String keyword) {
//        if (StringUtils.isEmpty(keyword))
//            throw new JsonResult<String>("参数不能为空");

        // 精确查找
        // ElasticSearchTemplate加中文筛选后无结果的解决办法:title.keyword
        String field = "title.keyword";
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.should(QueryBuilders.termsQuery(field, keyword));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQueryBuilder)
                .withPageable(PageRequest.of(0, 100))
                .build();

        // 默认查找
//        SearchQuery searchQuery = new NativeSearchQueryBuilder()
//                .withQuery(QueryBuilders.queryStringQuery(keyword).defaultField(field))
//                .withPageable(PageRequest.of(0, 100))
//                .build();

        List<BlogModel> list = elasticsearchTemplate.queryForList(searchQuery, BlogModel.class);
        return new JsonResult<>(list);
    }

2、使用wildcardQuery实现模糊查询,?匹配单个字符,*匹配多个字符

QueryBuilders.wildcardQuery(字段, "*"+关键字+"*")

/**
     * 模糊查找,wildcardQuery
     * @param keyword
     * @return
     */
    @GetMapping("/blog/search/wildCardTitle")
    public JsonResult<List<BlogModel>> searchWildcardQueryTitle(String keyword) {
//        if (StringUtils.isEmpty(keyword))
//            throw new JsonResult<String>("参数不能为空");

        // 模糊查找
        // ElasticSearchTemplate加中文筛选后无结果的解决办法:title.keyword
        String field = "title.keyword";
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+keyword+"*"));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQueryBuilder)
                .withPageable(PageRequest.of(0, 100))
                .build();

        List<BlogModel> list = elasticsearchTemplate.queryForList(searchQuery, BlogModel.class);
        return new JsonResult<>(list);
    }

3.使用withFilter过滤结果:

不加过滤条件以前,返回结果:"中国","中国人"
加了过滤条件"中国人",返回结果:"中国人"

  /**
     * 模糊查找,wildcardQuery
     * @param keyword
     * @return
     */
    @GetMapping("/blog/search/wildCardTitle")
    public JsonResult<List<BlogModel>> searchWildcardQueryTitle(String keyword) {
        // 模糊查找
        // ElasticSearchTemplate加中文筛选后无结果的解决办法:title.keyword
        String field = "title.keyword";
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.should(QueryBuilders.wildcardQuery(field, "*"+keyword+"*"));

        // 不加过滤条件以前,返回结果:"中国","中国人"
        // 加了过滤条件"中国人",返回结果:"中国人"
        BoolQueryBuilder filter =  QueryBuilders.boolQuery();
        filter.should(QueryBuilders.termsQuery(field, "中国人"));
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQueryBuilder)
                .withPageable(PageRequest.of(0, 100))
                .withFilter(filter)
                .build();

        List<BlogModel> list = elasticsearchTemplate.queryForList(searchQuery, BlogModel.class);
        return new JsonResult<>(list);
    }

. . .

相关推荐

额外说明

xml字符串转换映射 映射转换xml字符串

最近工作需要,对接支付。发现较老的支付公司还在用xml传数据,网上搜了很多也没有发现相关的东西。于是自己写了一个 附带http请求。   所需maven依赖 <!-- ########### 转换xml所需用到的 ############

额外说明

如何检查软件使用哪些端口

在Windows系统中,我们希望了解安装的软件使用了系统哪些端口,从而评估这个软件是否安全 我们可以使用第三方工具来完成这个任务,但实际上新版的Windows系统均自带这个功能 windows系统自带的“资源监视器”就能能查看端口使用情况,操作方法如下:

额外说明

R语言二进制包离线安装的几个问题

1、问题描述       由于公司网络使用代理,有时候在Rstudio中直接使用install.packages()从CRAN上安装包会出现 无法连接到网络的问题。这时,我们要从R语言的官网上下载适合windows安装的二进制文件,使用 离线安装的方式来

额外说明

Mysql8.0x小版本覆盖升级修复漏洞的方法(8.023到8.025)

有些项目验收碰到一些安全软件扫描漏洞,要求修补丁修复漏洞,MYSQL是无法单个修复补丁,只能从装或者覆盖安装,此文章介绍高版本的覆盖安装方法。8.016以上版本直接支持。 环境要求 操作系统 Mysql版本 Centos6 MYSQL8.0x向上小版本升

额外说明

如何使用IDEA断点调试(debug), 用图文并茂的方式来教你

文章目录 前言 一、为什么要使用debug 二、使用方法 1、逐行代码查看 2、数组越界 3、方法进入、出去 4、动态下断点 总结 前言 今天在刷算法题的过程中,遇到了很多错误,自己怎么想也想不明白,准备试一试IDEA的断点调试功能,发现自己不会debu

额外说明

AIR读取本地文件

<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" fo

额外说明

【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型

文章目录 前言 一、空指针(nullptr) 1.1概念解释 1.2形象比喻 1.3示例代码 1.4空指针nullptr的优势 二、long long类型 2.1概念解释 2.2形象比喻 2.3示例代码 2.4优势 2.5劣势 三、char16_t和ch

额外说明

线程池配置

package com.yxoa.qroom.utils; import lombok.Data; import org.springframework.context.annotation.Bean; import org.springframewo

额外说明

自定义Dynamics 365实施和发布业务解决方案 - 7. 报表

在每个组织中,决策者都依赖于各种报告来推动业务取得成功。因此,每个软件开发项目都需要开发报告,Dynamics365配备了最先进的报告功能。这些报告的范围从简单的查询到具有复杂查询的更高级的报告。此外,Dynamics365的一个关键功能是其仪表板功能,

额外说明

Sublime Text 3 安装 Package Control

1、Sublime Text 下载         ◆ 官网下载 Download - Sublime Text         ◆ https://download.csdn.net/download/qq_29639425/9652644 2、安装P

ads via 小工具