Сфинкс - Когда использовать, 'имеет' и 'индексирует' для полей

Я установил Сфинкса и Интеллектуального Сфинкса несколько дней назад на моем рубине на направляющих 2.3.2, и основной поиск работает отлично. Это означает без любых условий. Теперь, я хочу отфильтровать поиск с некоторыми условиями.

У меня есть модель Announcement и индексные взгляды следующим образом:

  define_index do
    indexes title, :as => :title, :sortable => true
    indexes description, :as => :description, :sortable => true
  end

Возможно, я неправ, но я заметил, что только, когда я добавил :sortable => true синтаксис к этим атрибутам, я мог использовать их в качестве условий в моем поиске. Иначе это ничего не найдет.

Теперь, я также использую acts_as_taggable_on плагин, который генерировал мои две таблицы базы данных: теги и маркировки. У меня нет модели для тегов, я просто имею acts_as_taggable_on :tags, :categories в моей модели Announcements.

Что я хотел бы сделать, теперь должен отфильтровать тегами. Так, я пытался добавить к своему индексу has tags(:id), :as => :tag_ids без удачи, и также indexes tags(:id), :as => :tag_ids но это не работало также.

Как может я создавать индексы, таким образом, я могу сделать что-то вроде этого:

Announcement.search 'some word', :conditions => {:tag_ids => some_id}

И также, который является различным между has и indexes

Спасибо, Brian

5
задан Brian Roisentul 16 January 2010 в 16:38
поделиться

1 ответ

Позвольте мне ответить на ваши вопросы в обратном порядке. Индексирует все, что ожидает, что строка, это то, что SPHINX будет искать текст, который вы предоставляете.

С другой стороны, имеет все , не добавляет это содержимое на поля поиска. Он ожидает в первую очередь числа, потому что вы используете этот материал для сортировки и фильтрации после того, как SPHINX уже выполнил поиск.

Наконец, я считаю, что вы хотите имеет теги (: ID): as =>: tag_ids в вашей модели, а : с => {: tag_ids => que_id} В вашем поиде вместо использования : Условия . Условия используются в текстовых полях, которые вы индексировали, как способ выполнения текстовых поисков на определенные поля вместо всех проиндексированных полей. Используется для фильтрации результатов, используя атрибуты, которые вы указали с , имеет все, что .

10
ответ дан 13 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: