歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Solr 的edismax與dismax比較與分析

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; 
Copyright © Linux教程網 All Rights Reserved