Skip to content

Commit

Permalink
fix Transmitter.update_all_fields when full reindex
Browse files Browse the repository at this point in the history
  • Loading branch information
bibendi committed Jun 14, 2013
1 parent 6049414 commit 2717041
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions lib/sphinx/integration/transmitter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,21 @@ def update_fields(fields)
end

# Обновление отдельных атрибутов индекса по условию
# Внимание, решения в этом методе временные, далее будет переписано подругому
#
# klass - Class
# fields - Hash (:field => :value)
# where - String (company_id = 123)
def self.update_all_fields(klass, fields, where)
rt_indexes(klass) do |index|
query = ::Sphinx::Integration::Extensions::Riddle::Query::Update.new(index.rt_name, fields, where).to_sql
execute(query)

query = "UPDATE #{index.core_name} SET sphinx_deleted = 1 WHERE #{where}"
execute(query)

if Redis::Mutex.new(:full_reindex).locked?
query = ::Sphinx::Integration::Extensions::Riddle::Query::Update.new(index.delta_rt_name, fields, where).to_sql
query = "SELECT sphinx_internal_id FROM #{index.name} WHERE #{where}"
ids = select(query).map{ |row| row['sphinx_internal_id'] }
ids.in_groups_of(500, false) do |group_ids|
klass.where(:id => group_ids).each(&:transmitter_update)
end if ids.any?
else
query = ::Sphinx::Integration::Extensions::Riddle::Query::Update.new(index.name, fields, where).to_sql
execute(query)
end
end
Expand All @@ -91,6 +92,17 @@ def self.execute(query)
ThinkingSphinx.take_connection{ |c| c.execute(query) }
end

# Запрос на получение данных из Sphinx
#
# query - String
# Returns Array
def self.select(query)
log(query)
result = nil
ThinkingSphinx.take_connection{ |c| result = c.execute(query).to_a }
result
end

# Данные, необходимые для записи в индекс сфинкса
#
# index - ThinkingSphinx::Index
Expand Down

0 comments on commit 2717041

Please sign in to comment.