Solr 相似度判断moreLikeThis

此博客详细介绍了如何通过Solr查询接口获取相异性数据的过程,包括参数设置和逻辑实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    /**
     * 获取相似性数据
     * @param id
     * @param mindf
     * @param mintf
     * @param count
     * @return
     */
    public List<LableGroup> getRelated(String id, int mindf, int mintf, int count) {                           
        List<LableGroup> lableGroups = new ArrayList<LableGroup>();        
        SolrQuery solrQuery = new SolrQuery();
        
        try {
            solrQuery.setQuery("id:" + id)
                      .setParam("fl", "id,title,url,score")
                     .setParam("mlt", "true")
                     .setParam("mlt.fl", "title")
                     .setParam("mlt.mindf", String.valueOf(mindf))
                     .setParam("mlt.mintf", String.valueOf(mintf))
                     .setParam("mlt.count", String.valueOf(count));
            
            QueryResponse response = server.query(solrQuery);
            
            if (null == response) return lableGroups;
            
            @SuppressWarnings("unchecked")
            SimpleOrderedMap<SolrDocumentList> solrDocumentLists = (SimpleOrderedMap<SolrDocumentList>) response.getResponse().get("moreLikeThis");

            for (int i=0; i<solrDocumentLists.size(); i++) {
                SolrDocumentList solrDocumentList = solrDocumentLists.getVal(i);
                for (SolrDocument doc : solrDocumentList) {
                    String doc_id = doc.getFieldValue("id").toString();
                    String doc_title = doc.getFieldValue("title").toString();                                        
                    String doc_url = doc.getFieldValue("url").toString();                    
                    String doc_score = doc.getFieldValue("score").toString();

                    // 判断相似度
                    if (Double.parseDouble(doc_score) > 1) {                    
                        LableGroup lableGroup = new LableGroup();                    
                        lableGroup.setId(doc_id);
                        lableGroup.setTitle(doc_title);                    
                        lableGroup.setUrl(doc_url);                    
                        lableGroups.add(lableGroup);
                    }    
                }
            }
            
        } catch (Exception e) {
            log.error("获取相似性数据error", e);
        }
        
        return lableGroups;

    }

注:

id:文档唯一主键;

fl:需要返回的字段;

mlt:在查询时,打开/关闭(MoreLikeThisComponent)的布尔值。

mtl.fl:根据哪些字段判断相似度;

mlt.mindf:最小文档频率,所在文档的个数小于这个值的词将不用于相似判断;

mlt.mintf:最小分词频率,在单个文档中出现频率小于这个值的词将不用于相似判断;

mlt.count:返回相似文章个数;

Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎 课程特点毕业后接触的第一个中间件就是Solr,在工作中用处广泛,为了便于大家快速掌握该技能,开始录制相关课程,该专栏特点如下:1.采用Solr最新版本视频录制,全网最新课程(Solr8.1于2019年5月16日发布)2.技能点全网最全,会结合工作经验,项目中用到的技能点都会有所涉及,更新章节比较全面3.适用范围广,从零基础到高级架构以及分布式集群都涵盖,适用初级、高级、项目实战等多个层次开发者4.多种维度辅助学习,采用独立solr粉丝群辅助教学,学员问题会及时得到解决,程序员突破圈 打卡制度,督促学员学习关注后再购买、 关注后再购买、 关注后再购买课程能得到什么1.快速学习到最新版本的全文检索技术,从视频、文章、圈子、粉丝交流等快速促进学习2.通过该技术,获得面试进阶指导3.结交人脉(庞大的粉丝群)..End初期学员100人,价格不会太高,也是为了帮助更多的开发者但是个人精力有限,所以限制条件如下1.求知欲强,有想向技术更深一层了解的2.乐于交流,喜欢探讨技术者3.学习惰性者慎入,购买后会督促大家学习,购买不是目的,学习到该技能才是该专栏的主要目的正式进入学习状态了吗,专栏群见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值