Description
Sup. I deal with the problem for three days.
In my project where I use search in model Record
I've implemented two buttons: "Delete index" and "Refresh index".
First button is redirecting page to controller delete_index
where I execute Record.tire.index.delete
.
Second button is redirecting page to controller refresh_index
where the index is refreshing via Sidekiq worker, where I execute Record.import
.
Main problem:
When I press "Delete index" - it works correct;
When I press "Refresh index" - the index is imports correctly but order by date is fully broken.
I've attached some screenshots with the problem.
Screenshot without problem: order is working:
Screenshot with problem: order is broken after I pressed "Delete index" and "Refresh index":
I can fix second case only if I do actions in this sequence:
- Execute
Record.tire.index.delete
- Shutdown RoR server
- Execute RoR server with
rails s
- Execure
Record.import
Some piece of code:
records_controller.rb:
def refresh_index
if params[:refresh]
RecordsImport.perform_async('exec')
redirect_to "/search"
end
end
def delete_index
if params[:delete]
Record.tire.index.delete
redirect_to "/search"
end
end
records_import.rb:
class RecordsImport
include Sidekiq::Worker
def perform(name)
if name == 'exec'
Record.import
else
return
end
end
end
My mapping in record.rb
model:
tire do
mapping do
indexes :id, index: :not_analyzed
indexes :timestamp, type: 'date', format: 'dd.MM.yyyy HH:mm', include_in_all: false
indexes :title, analyzer: 'snowball'
end
end
My search query:
@records = Record.search page: params[:page], per_page: 50 do
query do
string: "*"
end
sort do
by :timestamp, order: "desc"
end
end
Maybe I'm doing something wrong, but all suggestions welcome. Thanks in advance and sorry for my bad English.