科帮网-Java论坛、Java社区、JavaWeb毕业设计

登录/注册
您现在的位置:论坛 资料库 开源社区 > solr4.10 配置相似查询 MoreLikeThisComponent(MLT)和 ...
总共48085条微博

动态微博

查看: 8141|回复: 1

solr4.10 配置相似查询 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-11-05 17:45:42 |只看该作者 |倒序浏览
    相关说明:   
            Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 实现了一样的功能。如上所述,MLT 是与标准 SolrRequestHandler 集成在一起的;MoreLikeThisHandler 与 MLT 结合在一起,并添加了一些其他选项,但它要求发布一个单一的请求。我将着重讲述 MLT,因为使用它的可能性更大一些。幸运的是,不需要任何设置就可以查询它,所以您现在就可以开始查询。
      MLT 要求字段被储存或使用检索词向量,检索词向量以一种以文档为中心的方式储存信息。MLT 通过文档的内容来计算文档中关键词语,然后使用原始查询词语和这些新词语创建一个新的查询。提交新查询就会返回其他查询结果。所有这些都可以用检索词向量来完成:只需将 termVectors="true" 添加到 schema.xml 中的 <field> 声明。

    查询参数:
      id,文档主键,或使用其他唯一键;
      mlt 在查询时,打开/关闭 MoreLikeThisComponent 的布尔值。真|假
      fl,需要返回的字段
      mtl.fl,根据哪些字段判断相似度
      mlt.mindf,最小文档频率,所在文档的个数小于这个值的词将不用于相似判断
      mlt.mintf,最小分词频率,在单个文档中出现频率小于这个值的词将不用于相似判断
      mlt.count,返回相似文章个数
    方法一:MoreLikeThisComponent
    要查询的字段 <field name="ask" termVectors="true"/>
    1. try {
    2.                     HttpSolrServer server =  ServerManager.getInstance();
    3.             SolrQuery query = new SolrQuery();
    4.             query.setQuery("ask:吃饭吧");
    5.             //mlt在查询时,打开/关闭 MoreLikeThisComponent 的布尔值
    6.             query.setParam("mlt", "true");
    7.             //fl 需要返回的字段
    8.             query.setParam("fl", "score,ask");
    9.             //mtl.fl 根据哪些字段判断相似度
    10.             query.setParam("mlt.fl", "ask");  
    11.             //mlt.mintf 最小分词频率,在单个文档中出现频率小于这个值的词将不用于相似判断
    12.             query.setParam("mlt.mintf", "1");
    13.             //mlt.mindf 最小文档频率,所在文档的个数小于这个值的词将不用于相似判断
    14.             query.setParam("mlt.mindf", "1");  
    15.             QueryResponse response = server.query(query);
    16.             SimpleOrderedMap<SolrDocumentList> mltResults = (SimpleOrderedMap<SolrDocumentList>) response.getResponse().get("moreLikeThis");
    17.             for (int i = 0; i < mltResults.size(); i++) {
    18.                 SolrDocumentList items = mltResults.getVal(i);
    19.                 for (SolrDocument doc : items) {
    20.                     System.out.println(doc.getFieldValue("ask"));
    21.                           System.out.println(doc.getFieldValue("score"));
    22.                 }
    23.             }
    24.                 } catch (Exception e) {
    25.                     e.printStackTrace();
    26.                 }
    复制代码

    方法二:MoreLikeThisHandler
        首先在 solrconfig.xml 中配置 MoreLikeThisHandler  <requestHandler name="/mlt" class="solr.MoreLikeThisHandler">  </requestHandler>
    1. try {
    2.             HttpSolrServer server =  ServerManager.getInstance();
    3.             SolrQuery query = new SolrQuery();
    4.             query.setRequestHandler("/mlt");
    5.             query.setQuery("ask:吃饭吧");
    6.             //mlt在查询时,打开/关闭 MoreLikeThisComponent 的布尔值
    7.             query.setParam("mlt", "true");
    8.             //fl 需要返回的字段
    9.             query.setParam("fl", "score,ask");
    10.             //mtl.fl 根据哪些字段判断相似度
    11.             query.setParam("mlt.fl", "ask");  
    12.             //mlt.mintf 最小分词频率,在单个文档中出现频率小于这个值的词将不用于相似判断
    13.             query.setParam("mlt.mintf", "1");
    14.             //mlt.mindf 最小文档频率,所在文档的个数小于这个值的词将不用于相似判断
    15.             query.setParam("mlt.mindf", "1");  
    16.             QueryResponse resp = server.query(query);
    17.             SolrDocumentList sdl = resp.getResults();
    18.             System.out.println(sdl.getNumFound());
    19.             for(SolrDocument sd:sdl) {
    20.                     System.out.println(sd.getFieldValue("ask"));
    21.                     System.out.println(sd.getFieldValue("score"));
    22.             }
    23.                } catch (Exception e) {
    24.                     e.printStackTrace();
    25.             }
    复制代码



    科帮网-Java论坛、Java社区、JavaWeb毕业设计 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网-Java论坛、Java社区、JavaWeb毕业设计享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网-Java论坛、Java社区、JavaWeb毕业设计的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网-Java论坛、Java社区、JavaWeb毕业设计管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    本帖被以下淘专辑推荐:

    • · solr|主题: 8, 订阅: 0

    4

    主题

    0

    听众

    302

    金钱

    四袋长老

    该用户从未签到

    沙发
    发表于 2016-09-27 14:13:39 |只看该作者
    涨姿势了                                             
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表