Вопрос

Я использую 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* должен вернуть Балтимор.

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top