成功的路上总是离不开贵人的帮助,名师的指点和小人的刺激。

莫怕,过了桥,就翻篇了

es资料


# 数据库地址
jdbc.url=jdbc:mysql://127.0.0.1:3306/es_ik?serverTimezone=GMT&autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useAffectedRows=true&useSSL=false
# 数据库用户名
jdbc.user=root
# 数据库密码
jdbc.password=123456
# 数据库查询扩展词库sql语句
jdbc.reload.sql=select gel.lexicon_text as word from es_lexicon gel where gel.lexicon_type = 0 and gel.lexicon_status = 0 and gel.del_flag = 0 order by gel.lexicon_id desc
# 数据库查询停用词sql语句
jdbc.reload.stopword.sql=select gel.lexicon_text as word from es_lexicon gel where gel.lexicon_type = 1 and gel.lexicon_status = 0 and gel.del_flag = 0 order by gel.lexicon_id desc
# 数据库查询间隔时间 每隔10秒请求一次
jdbc.reload.interval=10
jdbc.className=com.mysql.cj.jdbc.Driver

  

permission java.net.SocketPermission "*", "connect,resolve"; permission java.lang.RuntimePermission "setContextClassLoader";

 

CREATE TABLE `es_lexicon` (
  `lexicon_id` bigint(8) NOT NULL AUTO_INCREMENT COMMENT '词库id',
  `lexicon_text` varchar(20) NOT NULL COMMENT '词条关键词',
  `lexicon_type` int(1) NOT NULL DEFAULT '0' COMMENT '0扩展词库 1停用词库',
  `lexicon_status` int(1) NOT NULL DEFAULT '0' COMMENT '词条状态 0正常 1暂停使用',
  `del_flag` int(1) NOT NULL DEFAULT '0' COMMENT '作废标志 0正常 1作废',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`lexicon_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='ES远程扩展词库表';

 

 /**
     * 分页
     *
     * @param
     * @param
     * @return
     */
    @RequestMapping(value = "/doSearchPage", method = RequestMethod.GET)
    @ResponseBody
    public ResultMessage doSearchPage(@RequestParam("companyName") String companyName,
                                      @RequestParam(value = "pageNum",required = false) Integer pageNum,
                                      @RequestParam(value = "pageSize",required = false) Integer pageSize) {
        ResultMessage rs = new ResultMessage();
        rs.setData(esSearchSevice.multiMatchQuery(companyName, pageNum, pageSize));
        rs.setCode("200");
        return rs;
    }
public PageBean<DbsCompanyVo> multiMatchQuery(String companyName, Integer pageNum, Integer pageSize) {


        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("dbs");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //MultiMatch 查找
        MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery(companyName, "dbsCompany");
        multiMatchQuery.operator(Operator.OR);
        searchSourceBuilder.query(multiMatchQuery);

        Integer from  = (pageNum -1) * pageSize;
        searchSourceBuilder.from(from);
        searchSourceBuilder.size(pageSize);

        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);



        //4.执行查询
        SearchResponse searchResponse = null;
        try {
            searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //5.解析查询结果
        System.out.println("花费的时长:" + searchResponse.getTook());

        SearchHits hits = searchResponse.getHits();

        System.out.println("符合条件的总文档数量:" + hits.getTotalHits().value);
        hits.forEach(p -> System.out.println("文档原生信息:" + p.getSourceAsString()));

        List<DbsCompanyVo> esProductTOS = new ArrayList<>();

        for (org.elasticsearch.search.SearchHit hit : hits) {
            //如果不做高亮,则可以直接转为json,然后转为对象
//            String value = hit.getSourceAsString();
//            ESProductTO esProductTO = JSON.parseObject(value, ESProductTO.class);
            //解析高亮字段
            //获取当前命中的对象的高亮的字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            log.info("json-hit: " + JSONObject.toJSONString(hit));
            //查询精确后的匹配分数值(可以用入参来进行判断做筛选过滤条件)
            float score = hit.getScore();
            log.info("hit score : " + score);
            HighlightField productName = highlightFields.get("dbsCompany");
            String newName = "";
            if (productName != null) {
                //获取该高亮字段的高亮信息
                Text[] fragments = productName.getFragments();
                //将前缀、关键词、后缀进行拼接
                for (Text fragment : fragments) {
                    newName += fragment;
                }
            }
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            //将高亮后的值替换掉旧值(这里就是高亮显示的部分)
            sourceAsMap.put("content", newName);
            String json = JSONObject.toJSONString(sourceAsMap);
            DbsCompanyVo esProductTO = JSONObject.parseObject(json, DbsCompanyVo.class);
            esProductTO.setScore(new BigDecimal(score));
            esProductTO.setGlCompany(newName);
            esProductTOS.add(esProductTO);
        }


        PageBean<DbsCompanyVo> pageBean = new PageBean<DbsCompanyVo>(esProductTOS);

        return pageBean;

    }

  

@Data
public class PageBean<T> implements Serializable {
    //当前页
    private Integer currentPage;
    // 总数
    private Long totalNumber;
    // 列表
    private List<T> list;

    public PageBean() {

    }

    public PageBean(Integer currentPage,Long totalNumber, List<T> list) {
        this.currentPage =currentPage;
        this.totalNumber = totalNumber;
        this.list = list;
    }
}
  ResultMessage rs = new ResultMessage();
        //1.创建 SearchRequest搜索请求,并指定要查询的索引
        SearchRequest searchRequest = new SearchRequest("dbs");

        //2.创建 SearchSourceBuilder条件构造。
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //MultiMatch 查找
        MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery(companyName, "dbsCompany");
        multiMatchQuery.operator(Operator.OR);
        searchSourceBuilder.query(multiMatchQuery);

        Integer from  = (pageNum -1) * pageSize;
        searchSourceBuilder.from(from);
        searchSourceBuilder.size(pageSize);

        //searchSourceBuilder.size(1000);
        //3.将 SearchSourceBuilder 添加到 SearchRequest中
        searchRequest.source(searchSourceBuilder);

        //4.执行查询
        SearchResponse searchResponse = null;
        try {
            searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }

        //5.解析查询结果
        System.out.println("花费的时长:" + searchResponse.getTook());

        SearchHits hits = searchResponse.getHits();

        System.out.println("符合条件的总文档数量:" + hits.getTotalHits().value);
        hits.forEach(p -> System.out.println("文档原生信息:" + p.getSourceAsString()));

        //List<DbsCompanyVo> esProductTOS = new ArrayList<>();

        ArrayList<DbsCompanyVO> esProductTOS = new ArrayList<>();

        for (org.elasticsearch.search.SearchHit hit : hits) {
            //如果不做高亮,则可以直接转为json,然后转为对象
//            String value = hit.getSourceAsString();
//            ESProductTO esProductTO = JSON.parseObject(value, ESProductTO.class);
            //解析高亮字段
            //获取当前命中的对象的高亮的字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            log.info("json-hit: " + JSONObject.toJSONString(hit));
            //查询精确后的匹配分数值(可以用入参来进行判断做筛选过滤条件)
            float score = hit.getScore();
            log.info("hit score : " + score);
            HighlightField productName = highlightFields.get("dbsCompany");
            String newName = "";
            if (productName != null) {
                //获取该高亮字段的高亮信息
                Text[] fragments = productName.getFragments();
                //将前缀、关键词、后缀进行拼接
                for (Text fragment : fragments) {
                    newName += fragment;
                }
            }
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            //将高亮后的值替换掉旧值(这里就是高亮显示的部分)
            sourceAsMap.put("content", newName);
            String json = JSONObject.toJSONString(sourceAsMap);
            DbsCompanyVO esProductTO = JSONObject.parseObject(json, DbsCompanyVO.class);
            esProductTO.setScore(new BigDecimal(score));
            esProductTO.setGlCompany(newName);
            esProductTOS.add(esProductTO);
        }


        PageBean<DbsCompanyVO> pageBean = new PageBean<DbsCompanyVO>(pageNum, hits.getTotalHits().value, esProductTOS);
        rs.setCode("200");
        rs.setData(pageBean);
        return rs;
    }

 https://zhuanlan.zhihu.com/p/268169068

https://www.modb.pro/db/170601

 

https://blog.csdn.net/jsiostream/article/details/87272784?spm=1001.2101.3001.6650.8&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-8-87272784-blog-124242744.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-8-87272784-blog-124242744.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=9

 

es定制分词器

es官方介绍自定义分词

 

posted on 2022-09-22 14:09  痞子陈2016  阅读(34)  评论(0编辑  收藏  举报

导航