首页 > 其他分享 >冲刺3

冲刺3

时间:2023-04-17 23:46:38浏览次数:72  
标签:boolQueryBuilder title 冲刺 searchDoc returnDoc new QueryBuilders

1.学习完elasticsearch。了解Java的操作。

2.在将elasticsearch部署到服务器的时候出现了很多错误。

3.写完elasticsearch的接口。

4.

    /**
     * <pre>通过文章标题查找文档</pre>
     * @param title 文章标题
     * @return 文档类的链表
     */
    @GetMapping("findByTitle")
    public Page4Navigator<ReturnDoc> findDocumentByTitle(
                                                         @RequestParam(value = "title",defaultValue = "") String title,
                                                         @RequestParam(value = "current",defaultValue = "1")int current,
                                                         @RequestParam(value = "pageSize",defaultValue = "10")int pageSize
                                                        )
    {
        NativeSearchQueryBuilder query = new NativeSearchQueryBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if(StringUtils.isNotBlank(title)){
            boolQueryBuilder.must(QueryBuilders.matchQuery("title",title));
        }
        query.withQuery(boolQueryBuilder);

        Pageable pageable = PageRequest.of(current-1,pageSize);
        SearchHits<Document> searchHits = elasticsearchRestTemplate.search(query.build(),Document.class, IndexCoordinates.of("document"));
        searchHits.getTotalHits();
        List<ReturnDoc> list = new ArrayList<>();

        for (SearchHit<Document>searchHit:searchHits){
            ReturnDoc returnDoc = new ReturnDoc();
            returnDoc.setDocument(searchHit.getContent());
            returnDoc.setPage(1);
            returnDoc.setScore(searchHit.getScore()*100);

            list.add(returnDoc);
        }

        Page<ReturnDoc> page = new PageImpl<>(list, pageable, searchHits.getTotalHits());

        return new Page4Navigator<>(page, 5);

    }

    private void createQuery(BoolQueryBuilder queryBuilder, String subject, String searchTypeOf, String linkOf,String fieldName){
        if(subject!=null && subject.length()>0){
            if("precision".equals(searchTypeOf)){
                //精确
                if("and".equals(linkOf)){
                    queryBuilder.must(QueryBuilders.matchQuery(fieldName,subject));
                }else if("or".equals(linkOf)){
                    queryBuilder.should(QueryBuilders.matchQuery(fieldName,subject));
                }else{
                    queryBuilder.mustNot(QueryBuilders.matchQuery(fieldName,subject));
                }
            }else{
                //模糊
                if("and".equals(linkOf)){
                    queryBuilder.must(QueryBuilders.fuzzyQuery(fieldName,subject).fuzziness(Fuzziness.AUTO));
                }else if("or".equals(linkOf)){
                    queryBuilder.should(QueryBuilders.fuzzyQuery(fieldName,subject).fuzziness(Fuzziness.AUTO));
                }else{
                    queryBuilder.mustNot(QueryBuilders.fuzzyQuery(fieldName,subject).fuzziness(Fuzziness.AUTO));
                }
            }
        }
    }

    @PostMapping("advancedSearch")
    public Page4Navigator<ReturnDoc> advanceSearch(@RequestBody SearchDoc searchDoc){

        NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

//        boolQueryBuilder.must(QueryBuilders.matchQuery("title",searchDoc.getTitle()))
        createQuery(boolQueryBuilder,searchDoc.getTitle(),searchDoc.getSearchTypeOfTitle(),searchDoc.getLinkOfTitle(),"title");
        createQuery(boolQueryBuilder,searchDoc.getAuthor(),searchDoc.getSearchTypeOfAuthor(),searchDoc.getLinkOfAuthor(),"author");
        createQuery(boolQueryBuilder,searchDoc.getContent(),searchDoc.getSearchTypeOfContent(),searchDoc.getLinkOfContent(),"pageContents");
        builder.withQuery(boolQueryBuilder);
        SearchHits<Document> searchHits = elasticsearchRestTemplate.search(builder.build(), Document.class, IndexCoordinates.of("document"));


        builder = new NativeSearchQueryBuilder();
        boolQueryBuilder = QueryBuilders.boolQuery();
        createQuery(boolQueryBuilder,searchDoc.getContent(),searchDoc.getSearchTypeOfContent(),searchDoc.getLinkOfContent(),"content");
        createQuery(boolQueryBuilder,searchDoc.getContent(),searchDoc.getSearchTypeOfContent(),searchDoc.getLinkOfContent(),"imgInfos");

        builder.withHighlightFields(
                new HighlightBuilder.Field("content")
                        .preTags("")
                        .postTags("")
                        .fragmentSize(50)
                ,new HighlightBuilder.Field("imgInfos")
                        .preTags("")
                        .postTags("")
                        .fragmentSize(50)
        );
        builder.withQuery(boolQueryBuilder);
        SearchHits<Paragraph> paragraph = elasticsearchRestTemplate.search(builder.build(), Paragraph.class, IndexCoordinates.of("paragraph"));
        Map<Long,List<String>> map = new HashMap<>();
        for (SearchHit<Paragraph> p:paragraph){
            Long id = p.getContent().getId();
            List<String> field = p.getHighlightField("content");
            field.addAll(p.getHighlightField("imgInfos"));
            if (map.containsKey(id/10000)){
                map.put(id/10000,field);
            }else {
                map.get(id/10000).addAll(field);
            }
        }
        Pageable pageable = PageRequest.of(searchDoc.getCurrent()-1, searchDoc.getPageSize(), Sort.by(Sort.Direction.DESC,"score"));

        List<ReturnDoc> list = new ArrayList<>();
        for(SearchHit<Document> d:searchHits){
            ReturnDoc returnDoc = new ReturnDoc();
            returnDoc.setDocument(d.getContent());
            returnDoc.setPage(1);
            returnDoc.setScore(d.getScore());
            returnDoc.setAbstract(map.get(d.getContent().getId()));
            list.add(returnDoc);
        }

        Page<ReturnDoc> page = new PageImpl<>(list,pageable, searchHits.getTotalHits());
        return new Page4Navigator<>(page,5);
    }

    @GetMapping("find")
    public List<PdfRestInfo> find(@RequestParam(value = "title",defaultValue = "") String title,@RequestParam(value = "authors",defaultValue = "")List<String>authors,@RequestParam(value = "content",defaultValue = "")String content,@RequestParam(value = "current",defaultValue = "1")int current){
        List<PdfRestInfo> pdfRestInfoList = new ArrayList<>();
        List<ReturnDoc> returnDocList = findDocumentByTitle(title, current,100).getContent();
        for (ReturnDoc r:returnDocList){
            PdfRestInfo pdfRestInfo = new PdfRestInfo();

            pdfRestInfo.setAuthors(r.getDocument().getAuthor().toString().replaceAll(",|\\[|]",""));
            pdfRestInfo.setFilePath(r.getDocument().getUrl());
            pdfRestInfo.setName(r.getDocument().getTitle());
            String str = "";
            for (String s:r.getAbstract()){
                str=str+s+'\n';

            }
            pdfRestInfo.setTextSummary(str);

            pdfRestInfoList.add(pdfRestInfo);
        }
        return pdfRestInfoList;
    }

  

标签:boolQueryBuilder,title,冲刺,searchDoc,returnDoc,new,QueryBuilders
From: https://www.cnblogs.com/lhk20213937/p/17327996.html

相关文章

  • 团队项目Scrum冲刺-day6
    这个作业属于哪个课程2023软件工程—双学位这个作业要求在哪里团队作业4——项目冲刺这个作业目标团队项目Scrum冲刺-day6目录1.会议1.1昨日已完成工作1.2今日计划完成的工作1.3工作中遇到的困难2.燃尽图3.代码/文档签入记录4.模块代码5.每日每人总结1.会议1......
  • 冲刺3
    这个作业属于哪个课程2023软件工程-双学位这个作业要求在哪里团队作业4——项目冲刺这个作业的目标团队项目Scrum冲刺day3目录1.会议1.1今日已完成的工作1.2明日计划完成的工作1.3工作中遇到的困难2.燃尽图3.代码/文档签入记录签入记录对应的Issue内容与链接,代......
  • 团队冲刺3
    1.任务量:10天。目前已经花的时间:2天。还剩余的时间:8天3. 4.已经写完接口文档。 ......
  • 团队冲刺第四天
    今天任务我计划用两个小时时间完成,但百度云对于代码的文章十分模糊,以至于我花了一个下午的时间今日完成:申请百度云个人账号,导入百度云人脸识别示例代码的包体       明日目标:继续安卓人脸识别的示例实现,可能转去做页面       遇到问题(已解决或未......
  • 团队冲刺个人博客1
    1、我昨天完成了springboot后端连接数据库一半任务,花了两个半小时,还剩余一天半时间2、遇到什么困难maven的版本过高,导致代码一直运行不起来,在pom文件导入依赖一直报错,一直更改更改,直到通过百度搜索花了好长时间才解决.连接数据库一直连不上,在屏幕上显示不出结果.3、今......
  • scrum项目冲刺_day4会议总结
    今日团队任务:图片转excel(5天)前端开发(需团队风格统一)调用接口(后端),json数据->excel前后端连接           任烁玚(进行中)            图片转html(8天)前端开发(需团队风格统一)图片转为pdf(存储)pdf转html(调用接口)[html存储到数据库]前后台数据同......
  • 团队冲刺第一天
    我们团队选题为人脸识别系统,经商定最后确定项目方向为依靠人脸识别登录系统,在系统学习期间依靠人脸检测实现专注度判定,并在用户学习中可以检测书写代码量,实现全自动化检测。在这期间,我们确定了学习方向,基本包含了用python连接数据库和百度云api的人脸技术,用python制作HTML界面并实......
  • 团队冲刺第二天
    今日完成:今日我认识了opencv关于人脸识别部分的内容,下载了人脸识别相关的插件,但导入失败       明日目标:明日我会换另一种思路,用百度云api为核心开发,先导入成功再设计。       遇到问题(已解决或未解决):我一开始尝试用opencv的人脸识别作为项目核心,但......
  • 团队冲刺第三天
    今天我计划用两个小时时间完成今日任务,结果因为一些问题弄了一天也没有成功。       今日完成:下载kotlin组件       明日目标:能成功引入kotlin组件并实现人脸识别       遇到问题(已解决或未解决):人脸开发要用到kotlin这门语言,但今天我......
  • 冲刺阶段1(4月13)
    今天我们利用课余时间展开了长达一个小时的讨论,本次讨论主要针对于我们所选择项目的功能进行了细致划分完善了上次大致的界面,本次的界面将会是最后版本的界面。 ......