Как реализовать поиск как переполнение стека - PullRequest
6 голосов
/ 30 июня 2010

Я реализовал полнотекстовый поиск, используя Sphinx и Thinking Sphinx . Я хочу добавить столбец мудрый поиск. Что-то вроде :-( на примере переполнения стека)

Предположим, вы хотите увидеть связанные с вами действия, просто наберите:

  user:me

Тогда он вернет результат со всеми вопросами и ответами, связанными с пирожными.

Если вы наберете

 votes:15

тогда он вернет результат со всеми вопросами, отмеченными как имеющие более 15 голосов.

А если вы наберете

  user:me votes:15

тогда он вернет все принадлежащие вам вопросы и ответы, набрав более 15 голосов.

Как я могу реализовать это?

Сейчас мои результаты поиска основаны на полнотекстовом поиске. Как можно включить такие функции?

Какие-либо опции доступны в Sphinx или Solr или любых других поисковых системах?

1 Ответ

2 голосов
/ 01 июля 2010

:with вариант в мышлении сфинкса.

Прежде всего, вы должны определить эти атрибуты в своем определении индекса ( см. Раздел атрибутов здесь ).

has views_count, :as => :views, :type => :integer
has user.id, :as => :user, :type => :integer

Тогда вы можете искать такие сообщения:

Post.search '', :with => {:views => 12..maxint, :user => User.first.id}

(я не уверен, есть ли более элегантная возможность дать открытые диапазоны, но 12..max_int должно быть достаточно)

Две важные вещи:

  1. если вы хотите считать связанные объекты (например, ответы), вы должны использовать кеш счетчика
  2. если ваш "пользователь" является полиморфной ассоциацией, я рекомендую "CRC32(CONCAT(user_type, user_id))" вместо user.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...