ruby on rails - Searchkick search data working in test but not in browser -
i experiencing weird behavior elasticsearch wrapper ruby gem searchkick, , i'd love help!
the issue
the expected behavior should able search full name space in it. works in test, not in browser.
the code
account.rb
class account searchkick word_start: [ :first_name, :last_name, :name, # <======================== key line :email, :phone, :company, ], callbacks: :async def self.index_search(query:) search( query || '*', fields: [ :first_name, :last_name, :name, # <======================== key line :email, :phone, :company, ], match: :word_start, where: { test_account: false }, order: { created_at: :desc }, limit: 20, misspellings: false, ) end def search_data { first_name: first_name, last_name: last_name, name: "#{first_name} #{last_name}", # <======================== key line created_at: created_at, email: email, phone: phone, test_account: test_account, company: company } end end
account_test.rb - of these pass
class accounttest < activesupport::testcase describe "::index_search" let(:account_0) factorygirl.create(:account, company: "xyz consulting") # name: "testy mctesterson" end let(:account_1) factorygirl.create(:account, first_name: "bob") # name: "bob mctesterson" end let(:search) account.index_search(query: query) end before :all account_0 , account_1 # instantiate searchkick.disable_callbacks account.reindex end describe "when there spaces in string" let(:query) { "xyz con" } "finds , appropriate records" assert_equal [account_0.id], search.map(&:id) end end describe "when query matches full name" let(:query) { "bob mct" } "finds , appropriate records" assert_equal [account_1.id], search.map(&:id) end end end end
note: when comment out 3 'key lines' account.rb
, second of tests fails. name:
in #search_data
method seems working.
search_controller.rb (essentially)
class searchcontroller < applicationcontroller def index puts "params[:query]: #{params[:query]}" puts "custom_search.map(&:first_name): #{custom_search.map(&:first_name)}" puts "custom_search.map(&:last_name): #{custom_search.map(&:last_name)}" end private def custom_search account.index_search(query: params[:query]) end end
the complication
nonetheless, in browser, doesn't seem working. above code, searching via browser, can't reproduce success.
when search "bob "
, output in server console is
params[:query]: bob custom_search.map(&:first_name): ["bob"] custom_search.map(&:last_name): ["mctesterdorff"]
but search "bob m"
, "bob mct"
, or "bob mctesterdorff"
, empty results (respecitvely):
params[:query]: bob m custom_search.map(&:first_name): [] custom_search.map(&:last_name): [] params[:query]: bob mct custom_search.map(&:first_name): [] custom_search.map(&:last_name): [] params[:query]: bob mctesterdorff custom_search.map(&:first_name): [] custom_search.map(&:last_name): []
do have idea issue might be?
wiki
Comments
Post a Comment