Solr 的edismax与dismax比较与分析

字体大小: 中小 标准 ->行高大小: 标准

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

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

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

首先取出搜索字段名qf

将最终解析成一个BooleanQuery

先解析主mainQuery:

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

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

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

看主要代码更清晰:

  1. @Override  public Query parse() throws ParseException { 
  2.   SolrParams solrParams = SolrParams.wrapDefaults(localParams, params);   
  3.   queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF));    if (0 == queryFields.size()) { 
  4.     queryFields.put(req.getSchema().getDefaultSearchFieldName(), 1.0f);    } 
  5.       /* the main query we will execute.  we disable the coord because 
  6.    * this query is an artificial construct     */ 
  7.   BooleanQuery query = new BooleanQuery(true);   
  8.   boolean notBlank = addMainQuery(query, solrParams);    if (!notBlank) 
  9.     return null;    addBoostQuery(query, solrParams); 
  10.   addBoostFunctions(query, solrParams);   
  11.   return query;  } 

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/65216.html