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

相关说明:     
        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.             }
复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值