2009-04-15 6 views
5

Я использую Sphinx с плагином для мышления Sphinx. Я индексировали модель под названием Место следующим кодом (и рейк thinking_sphinx: команда индекса)Sphinx возвращает плохие результаты поиска

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'

Кто-нибудь знает, что здесь происходит?

Спасибо

ответ

6

Если у вас есть enable_star набор на 1 и min_prefix_len или min_infix_len установлен на 1 или больше, вы не получите B, чтобы соответствовать Балтимор (и даже тогда, я думаю, что нужно искать B * чтобы получить матч).

То, что здесь происходит то, что по умолчанию, мышление Sphinx рассказывает Sphinx использовать английский парадигматический, что позволяет подобных слов (символами, а не по смыслу), которые будут рассматриваться матчи, поэтому он ставит Baltimor и Baltimore в той же корзине.

Если вы хотите получить какую-либо часть любого слова совпадает, то вам нужно поставить что-то вроде следующего в конфигурации/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 

Затем остановить Сфинкс, Переиндексирование и перезапустить Сфинкс , Как только вы это сделаете, поиск B * должен вернуть Балтимор.

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

+0

сладкий, только что нашел, что на документации по сфинксу ... но не смог найти, где он сказал, чтобы положить это в yml. Спасибо! – Tony

+0

Есть ли способ, когда им не нужно набирать * в конце? Как и поиск дерева, можно было бы подтянуть деревянные и деревянные работы, не набирая древесину * – Mike

+0

Отличный ответ. Для всех, кто спотыкается здесь, подробности можно найти по адресу http://freelancing-god.github.com/ts/en/advanced_config.html. Следует отметить, что установка min_infix_len на 1, скорее всего, снизит производительность. – dmonopoly

 Смежные вопросы

  • Нет связанных вопросов^_^