Sphinx возвращает неверные результаты поиска
-
09-09-2019 - |
Вопрос
Я использую Sphinx с плагином Thinking Sphinx.Я проиндексировал модель под названием Venue с помощью следующего кода (и команды rake think_sphinx:index):
define_index do
indexes :name
indexes city
indexes zip
end
Я получаю результаты в своем контроллере с помощью этого кода:
@venues = Venue.search params[:search]
и я отображаю их как JSON.У меня проблема в том, что когда я нажимаю на этот URL:
http://localhost:3000/venue/list?search=Baltimo
Я ничего не получаю.Но когда я нажимаю на этот URL:
http://localhost:3000/venue/list?search=Baltimor
Я получаю все объекты, расположенные в городе Балтимор.По какой-то причине один персонаж имеет значение.Теоретически я должен получить все объекты в Балтиморе, если просто выполню поиск по одному символу — «b».
Кто-нибудь знает, что здесь происходит?
Спасибо
Решение
Если у вас нет enable_star
установить на 1 и min_prefix_len
или min_infix_len
если установить значение 1 или более, вы не получите B, соответствующее Балтимору (и даже в этом случае, я думаю, вам нужно искать B *, чтобы получить совпадение).
Здесь происходит то, что по умолчанию Thinking Sphinx говорит Sphinx использовать английский стеммер, который позволяет похожий слова (по символам, а не по значению) считаются совпадениями, поэтому он помещает Балтимор и Балтимор в той же корзине.
Если вы хотите, чтобы какая-либо часть любого слова совпадала, вам нужно поместить в config/sphinx.yml что-то вроде следующего:
development:
enable_star: 1
min_infix_len: 1
test:
enable_star: 1
min_infix_len: 1
production
enable_star: 1
min_infix_len: 1
Затем остановите Sphinx, переиндексируйте и перезапустите Sphinx.Как только вы это сделаете, поиск B* должен вернуть Балтимор.
Надеюсь это поможет.