你好,游客 登录 注册 搜索
背景:
阅读新闻

Solr 的edismax与dismax比较与分析

[日期:2012-10-16] 来源:CSDN  作者:duck_genuine [字体: ]

edismax支持boost函数与score相乘作为,而dismax只能使用bf作用效果是相加,所以在处理多个维度排序时,score其实也应该是其中一个维度 ,用相加的方式处理调整麻烦。

而dismax的实现代码逻辑比较简单,看起来比较易理解,edismax是它的加强版,其实是改变了不少。。比如在以下:

先看看dismax的解析主要实现思路:

首先取出搜索字段名qf

将最终解析成一个BooleanQuery

先解析主mainQuery:

  • 用户主要是搜索串的解析
  • altQuery解析处理,看是否使用用户定义的后备搜索串
  • PhraseQuery解析组装

再解析bq查询,主要是额外加分的查询,不会影响搜索结果数,只会影响排序

再则是bf解析,函数搜索最后会以加的方式作用于文档评分

看主要代码更清晰:

  1. @Override 
  2. public Query parse() throws ParseException { 
  3.   SolrParams solrParams = SolrParams.wrapDefaults(localParams, params); 
  4.  
  5.   queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF)); 
  6.   if (0 == queryFields.size()) { 
  7.     queryFields.put(req.getSchema().getDefaultSearchFieldName(), 1.0f); 
  8.   } 
  9.    
  10.   /* the main query we will execute.  we disable the coord because 
  11.    * this query is an artificial construct 
  12.    */ 
  13.   BooleanQuery query = new BooleanQuery(true); 
  14.  
  15.   boolean notBlank = addMainQuery(query, solrParams); 
  16.   if (!notBlank) 
  17.     return null
  18.   addBoostQuery(query, solrParams); 
  19.   addBoostFunctions(query, solrParams); 
  20.  
  21.   return query; 
linux
相关资讯       Solr  Solr使用  Solr配置  Solr教程 
本文评论   查看全部评论 (1)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 1 楼
* 匿名 发表于 2012/10/16 22:19:42
转我文章