Можно ли использовать поиск Sphinx с динамическими условиями?

В моем веб-приложении мне нужно выполнить 3 типа поиска в таблице items со следующими условиями:

  1. items.is_public = 1 (используйте поле title для индексации) - можно получить много результатов (мощность намного выше, чем в других случаях)

  2. items.category_id = {X} (используйте поля title + private_notes для индексации) — обычно менее 100 результатов

  3. items.user_id = {X} (используйте поля title + private_notes для индексации) — обычно менее 100 результатов

Я не могу найти способ заставить Sphinx работать во всех этих случаях, но в первом случае он работает хорошо. Должен ли я использовать Sphinx только для 1-го случая и использовать старый добрый «медленный» FULLTEXT поиск в MySQL (по крайней мере, из-за меньшей кардинальности в 2-3 случаях)?

Или только я и Сфинкс умеем практически все?


person Nikita Fedyashev    schedule 19.05.2010    source источник


Ответы (1)


Без полного знания ваших моделей я мог бы что-то упустить, но как это:

class item < ActiveRecord::Base
  define_index do
    indexes :title
    indexes :private_notes
    has :is_public, :type => :boolean
    has :category_id
    has :user_id
  end
end

1)

Item.search(:conditions => {:title => "blah"}, :with => {:is_public => true})

2)

Item.search("blah", :with => {:category_id => 1})

3)

Item.search("blah", :with => {:user_id => 196})
person James Healy    schedule 19.05.2010
comment
Спасибо! Я считаю, что think_sphinx намного мощнее, чем гем Ultrasphinx. Так что теперь нет необходимости переключаться на FULLTEXT-поиск, отличный от sphinx. - person Nikita Fedyashev; 20.05.2010