class EasySolr::Queryer

Attributes

client_class_name[RW]
solr_settings[RW]

Public Class Methods

new(client_class_name) click to toggle source
# File lib/easy_solr/queryer.rb, line 10
def initialize(client_class_name)
  nn_object             = Object.const_get(client_class_name)
  @client_class_name    = nn_object.table_name
  @solr_settings        = nn_object::SOLR_SEVICE_CONFIG
  @expr                 = ::EasySolr::Expressions.new
  @expr.nn_custom_links = nn_object::LINKS
end

Public Instance Methods

current_solr_connection() click to toggle source

Description

获取 Solr 连接

# File lib/easy_solr/queryer.rb, line 38
def current_solr_connection
  if defined? @deal_search_connection
    @deal_search_connection
  else
    solr_url  = "#{solr_settings[:host]}:#{solr_settings[:port]}#{solr_settings[:path]}"
    @deal_search_connection = RSolr.connect :url => solr_url
  end
end
generate_scope(scope) click to toggle source

Description

根据主键ID 生成scope
# File lib/easy_solr/queryer.rb, line 62
def generate_scope(scope)
  ## 执行顺序
  ##  1、break_down
  ##  2、solr_pri_key || mysql_pri_key
  break_down(@expr.nn_custom_links)

  pri_ids = self.perform.map{|_item| _item[solr_pri_key].to_i}
  scope.where(" #{ client_class_name }.#{ mysql_pri_key } IN (?) ", pri_ids)
end
generate_scope_str(scope) click to toggle source

Description

根据主键生成 scope 的字符串形式

# File lib/easy_solr/queryer.rb, line 77
def generate_scope_str(scope)
  break_down(@expr.nn_custom_links)

  " #{ client_class_name }.#{ mysql_pri_key } IN (?) "
end
perform() click to toggle source

Description

根据所有生成的信息 执行 Solr 模糊查询

# File lib/easy_solr/queryer.rb, line 23
def perform
  solr_str    = @expr.query_string_for_solr

  solr_params = { :q => solr_str, :rows => 1000 }
  result      = current_solr_connection.get 'select', :params => solr_params

  @expr.destroy!
  result_perform(result).result_items
end
where(prefix, *values) click to toggle source

Description

巧妙运用 where 将

# File lib/easy_solr/queryer.rb, line 52
def where(prefix, *values)
  @expr.solr_where(prefix, *values)
  self
end