Elasticsearch的关键词搜索

2023-10-26

返回给前端的实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {

    private Long total;
    private List<RequestParamDoc> tkyb;

}
/*
* 前端的集合类
* */
@Data
@NoArgsConstructor
public class RequestParamDoc {
    private  float score;
    private String gsbh;
    private String gsmc;
    private String zcd;
    private String gljg;
    private String gxxl;
    private String sss;
    private String ssj;
    private String gsjc;



    public RequestParamDoc(RequestParam requestParam) {

        this.score = requestParam.getScore();
        this.gsbh = requestParam.getGsbh();
        this.gsmc = requestParam.getGsmc();
        this.zcd=requestParam.getZcd();
        this.gljg = requestParam.getGljg();
        this.gxxl = requestParam.getGxxl();
        this.sss = requestParam.getSss();
        this.ssj = requestParam.getSsj();
        this.gsjc = requestParam.getGsjc();

    }
}

es对应的实体类

/**
 *es对应的实体类
 */
@Data
public class RequestParam {

    private String gsbh;
    private String gsmc;
    private String zcd;
    private String gljg;
    private String gxxl;
    private String sss;
    private String gsjc;
    private String ssj;
    private float score;


}

前端传递的搜索参数实体类

@Data
public class RequestParams {

    private String key; //可以里面包含的是分词的所有字段
    private Integer page;
    private Integer size;



}

controller层

@RestController
public class WayController {

    @Autowired
    private IWayService wayService;

    /**
     * 关键词搜索
     * @param params
     * @return
     */
    @PostMapping("/way/list")
    public PageResult search(@RequestBody RequestParams params){

        return wayService.search(params);

    }
}

service层接口

public interface IWayService{
    /**
     * 关键词分页查询
     *
     */
    PageResult search(RequestParams params);
}

service实现类

@Slf4j
@Service
public class WayService implements IWayService  {



    @Autowired
    private RestHighLevelClient client;

    /**
     * 关键词分页查询
     *
     * @param params
     * @return
     */
    @Override
    public PageResult search(RequestParams params) {

        //获取关键词
        String key = params.getKey();

        //创建索引库的链接
        SearchRequest searchRequest = new SearchRequest("hzgs_fgb_gsxx");

        //创建查询条件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //创建bool查询
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

        //用公司名称跟路线名称
        if (StringUtils.isBlank(key)) {

            boolQueryBuilder.must(QueryBuilders.matchAllQuery());

        } else {

            boolQueryBuilder.must(QueryBuilders.multiMatchQuery("gsmc", key, "gxxl", key));

        }

        // 设置搜索条件
        searchSourceBuilder.query(boolQueryBuilder);

        //进行分页设置
        searchSourceBuilder.from(params.getPage());
        searchSourceBuilder.size(params.getSize());


        searchRequest.source(searchSourceBuilder);


        // 增加高亮查询
        HighlightBuilder highlightBuilder = new HighlightBuilder();

        // 设置高亮条件
        highlightBuilder.preTags("<span>");
        highlightBuilder.field("gsmc");
        highlightBuilder.postTags("</span>");
        searchSourceBuilder.highlighter(highlightBuilder);

        List<RequestParamDoc> list = new ArrayList<>();

        long total = 0L;

        try {

            //在索引库中进行查询
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            SearchHits hits = response.getHits();

            //获取总条数
            total = response.getHits().getTotalHits().value;

            for (SearchHit hit : hits) {

                String jsonStr = hit.getSourceAsString();

                //json转化为对象
                RequestParamDoc requestParamDoc = JSON.parseObject(jsonStr, RequestParamDoc.class);

                list.add(requestParamDoc);

            }

        } catch (IOException e) {
            log.error("Es搜索异常!");
            e.printStackTrace();

        }

        return new PageResult(total, list);

    }
}

Springboot启动类

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class WayApplication {

    public static void main(String[] args) {
        SpringApplication.run(WayApplication.class, args);
    }

    @Bean
    public RestHighLevelClient client(){

        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        //进行es的授权
        credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("es111","123344555"));

        //es的链接库
        return new RestHighLevelClient(RestClient.builder(HttpHost.create("http://127.0.0.1:9200")).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
                httpAsyncClientBuilder.disableAuthCaching();
                return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        }));
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch的关键词搜索 的相关文章

  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • App Engine 日志中的 /_ah/queue/__deferred__

    我有一个使用 Google Cloud SQL 的 App Engine 应用程序 并且从我的应用程序的页面中我正在执行一些数据库操作 每当访问此页面时 它都无法执行所有数据库操作 当我进入控制台时 我看到的只是 ah queue defe
  • IBM WebSphere MQ 2042 错误

    我有以下代码 int openOptions MQC MQOO INQUIRE MQC MQOO FAIL IF QUIESCING MQC MQOO INPUT SHARED 执行时 我收到错误 com ibm mq MQExceptio
  • 如何重构“字符串类型”代码?

    我目前正在开发一个代码库 其中有几类变量 例如数据库路径 它们简单地表示为字符串 这些 非 类型的大多数操作都在实用程序类中定义 我创建了一个新类来表示数据库 并将操作定义为实例方法 采用传统的 OOP 风格 然而 浏览大型代码库并重构它以
  • 如何使 Java 中的自定义泛型类型链表排序?

    我正在用 java 编写自己的泛型链表 而不是使用 java 集合链表 链表的add方法由以下代码组成 public void add T item int position Node
  • 与Java混淆覆盖访问级别[重复]

    这个问题在这里已经有答案了 可能的重复 为什么不能降低java子类中方法的可见性 https stackoverflow com questions 1600667 why cant you reduce the visibility of
  • 我们如何使用 StringBuilder 在字符串前面添加字符串?

    我知道我们可以使用附加字符串StringBuilder 有没有一种方法可以使用前置字符串 即在字符串前面添加字符串 StringBuilder这样我们就可以保持性能优势StringBuilder offers 使用位置参数设置为 0 的 i
  • 如何在生产环境中运行 spring boot 可执行 jar?

    Spring Boot 的首选部署方法是通过内部包含 tomcat 的可执行 jar 文件 它是从一个简单的开始java jar myapp jar 现在 我想将该 jar 部署到 EC2 上的 Linux 服务器上 我是否遗漏了某些内容
  • Wicket setResponsePage() 方法如何工作?

    在学习 JSP 和 servlet 时 我听说了重定向和调度 他们中的哪一个做 Wicket 的setResponsePage 履行 What setResponsePage确实取决于几个因素 您调用 setResponsePage 的次数
  • 根据使用频率随机生成字母?

    如何根据常用语音中的使用频率随机生成字母 任何伪代码都值得赞赏 但如果用 Java 实现就更棒了 否则 只需朝正确的方向戳一下就会有所帮助 注意 我不需要生成使用频率 我确信我可以很容易地查找到它 我假设您将频率存储为 0 到 1 之间的浮
  • 如何处理过时的连接?

    我们的应用程序是一个 J2EE 应用程序 在 Websphere 6 1 上通过 Mainframe DB2 后端使用 Struts EJB Hibernate 最近已投入生产 我们收到过时的连接异常当用户第一次或有时登录应用程序时 此异常
  • 在 IntelliJ IDEA 中哪里添加像 -ea 这样的编译器选项?

    我想添加 ea选项 我把它设置在Project Settings gt Compiler gt Java Compiler Additional command line parameters 但它导致了 make 错误 invalid f
  • Java HTTPS客户端证书认证

    我对HTTPS SSL TLS我对客户在使用证书进行身份验证时到底应该提供什么内容感到有点困惑 我正在编写一个 Java 客户端 需要执行一个简单的操作POST数据到特定的URL 这部分工作正常 唯一的问题是它应该重新完成HTTPS The
  • 如何使用 poi 获取 java 中单元格的数据验证源?

    I have defined a list of valuses my list in one excel sheet as follow 在另一个 Excel 工作表中 我将某些单元格引用到该列表 以便该列表在单元格中显示为下拉列表 如下
  • Dao 和服务接口的需求

    我是Spring Mvc的新手 在很多教程中 我发现有一个像这样的Dao接口 public interface StudentDAO public List
  • jni.h:没有这样的文件或目录

    我一直在关注本教程 http www java tips org other api tips jni simple example of using the java native interface html 在第 5 步 我从 GCC
  • 编写无 BOM 的 UTF-8

    这段代码 OutputStream out new FileOutputStream new File C file test txt out write A getBytes 和这个 OutputStream out new FileOu
  • 如何从 Java 中的字符串表示形式获取 Locale?

    有没有一种巧妙的方法来获得Locale http java sun com javase 6 docs api java util Locale html来自 Locale 返回的 编程名称 的实例toString 方法 一个明显且丑陋的解
  • Java 泛型和数字

    为了看看我是否可以清理一些数学代码 主要是矩阵代码 我尝试使用一些 Java 泛型 我有以下方法 private
  • List 和 List 之间的区别[重复]

    这个问题在这里已经有答案了 我读过很多这方面的内容 我知道 List listOfObject new ArrayList

随机推荐

  • Qt中快捷键& 的使用方法

    Qt中为组件添加快捷方式使用 键 具体用法如下 include
  • debian系统配置ip地址

    在Debian中网卡的设置可以通过 etc network interfaces文件来进行 具体可分为三种不同的配置方式 DHCP自动获取 静态分配IP地址和PPPoE宽带拨号 具体设置如下 在进行配置之前 首先进入 etc network
  • Python Excel 操作 Openpyxl 模块笔记

    xlsx 是 Microsoft Excel 使用的开放 XML 电子表格文件格式的文件扩展名 xlsm 文件支持宏 xlsx 是专有的二进制格式 而 xlsx 是基于 Office Open XML 格式的 Excel 文件处理 1 打开
  • Pycharm结合Git、GitHub配置与其常用操作

    文章目录 一 Pycharm配置Git 1 Pycharm Git安装准备 2 Pycharm配置Git路径 二 Pycharm配置GitHub 1 准备GitHub账号 2 HTTP代理设置 3 连接GitHub账号 1 账号登录 Use
  • python字典键值对的值可以重复吗_当字典键相同时,为什么Python只保留最后一个键值对?...

    假设我创建了一个字典a dictionary 其中两个键值对具有相同的键 In 1 a dictionary key 5 another key 10 key 50 In 2 a dictionary Out 2 key 50 anothe
  • SqliLabs Less25-25a

    第二十五关 GET类型基于单引号 and or过滤 你所有的and or都是我们的 的错误 1 使用union select 1 2 3 尽量避过and or http 127 0 0 1 500 Less 25 id 1 union se
  • 机器学习笔记-多分类学习,类别不平衡,决策树

    读书笔记 多分类学习 基本思想 拆解法 将多分类任务拆解为若干个二分类任务求解 先对这些问题经拆分 为拆分出的每个二分类任务训练一个分类器 测试时 对这些分类器的预测结果进行集成以获得最终的多分类结果 拆分策略 one vs one 一对一
  • 【教程】TestComplete测试桌面应用程序教程(六)

    TestComplete是一款具有人工智能的自动UI测试工具 利用自动化测试工具和人工智能支持的混合对象识别引擎 轻松检测和测试每个桌面 Web和移动应用程序 其中 TestComplete支持测试使用C C VB NET Java Del
  • 【STM32】STM32单片机结构及部件原理

    STM32是目前比较常见并且多功能的单片机 要想学习STM32 首先要去了解它的基本构成部分以及各部分的原理 单片机型号 正点原子STM32F103ZET6 目录 STM32内部结构总览图 2 内部结构解析 STM32内部结构总览图 2 内
  • 网络正常,某个网页或软件无法加载

    你是否经历过切换网络后 有时会出现虽然能够上网 但偶尔出现个别网页加载失败 知乎 哔哩哔哩 一般是由于设备DNS缓存出现异常 以下是针对个别系统的解决方法 其他系统原理相同 win10 1 进入网络适配器 更改Internet协议DNS服务
  • PCL RANSAC 拟合直线

    RANSAC拟合直线 一 算法原理 1 算法简介 2 直线拟合 3 模型系数 4 参考文献 二 代码实现 三 结果展示 四 python代码 一 算法原理 1 算法简介 RANSAC算法由Fischler和Bolles于1981年提出 是一
  • linux下mysql写中文变成问号_如何解决数据库插入中文字体时显示问号

    欢迎点击 算法与编程之美 关注我们 本文首发于微信公众号 算法与编程之美 欢迎关注 及时了解更多此系列文章 问题描述 我们在进行数据库的增删改查的操作时 当我们插入英文或者数字等字符串的时候能够正常显示 但的当我们插入中文字体的时候我们就会
  • 火狐解决OCSP回应包含过期信息的问题

    连接 addons mozilla org 时发生错误 OCSP 回应包含过期信息 错误码 sec error ocsp old response hosts文件添加 vi etc hosts 117 18 237 29 ocsp digi
  • 马云的一席话

    关于坚持 今天很残酷 明天更残酷 后天很美好 但是大多数人死在明天晚上 看不到后天的太阳 所谓坚持成功 不是坚持 一直成功 而是坚持到 成功为止 关于创新 做任何事 必须要有突破 没有突破 就等于没做 行业饱和即意味危机来临 但巴菲特在股票
  • Java中JSON数据的读取和解析

    在做springboot项目时用到了json文件读取和解析 所以在这里记录一下学习过程中总结的一些点 希望对大家有帮助 配置fastJson
  • 超高清

    海思 HDR HDR行业面临巨大挑战 01 标准不统一 终端呈现效果参差不齐 HDR多种技术标准共存 缺少终端侧技术实现方案 标准间兼容性较差 不能覆盖主流终端的适配 认证及测试过程 导致终端呈现效果差距大 02 生态碎片化 部分技术方案专
  • Cordova 环境搭建+打包Android APK

    一 环境搭建 1 JDK 1 1 下载JDK http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 在上面的网址中选择符合自己操作
  • 正则表达式匹配案例

    匹配案例 1 判断变量的名称 由数字 字母 下划线组成 不能以数字作为开头 a zA Z a zA Z0 9 注意 如果不加 中间如果有不符合字符如abc 123就会匹配成功 import re result re match r a zA
  • 《ReactNative系列讲义》进阶篇---06.FlatList(三)

    版权声明 本文为博主原创文章 未经博主允许不得转载 一 简介 截止到上篇文章 关于FlatList无论是简单的还是高级的属性用法都已经介绍完毕 今天我们一起来看看FlatList更高级的玩法 相关方法的调用 二 基础知识 获取FlatLis
  • Elasticsearch的关键词搜索

    返回给前端的实体类 Data AllArgsConstructor NoArgsConstructor public class PageResult private Long total private List