Thinking Sphinx Application Wide Search и работа с результатами - PullRequest
0 голосов
/ 25 сентября 2011

Вариант использования:

Я бы хотел, чтобы мой пользователь выполнял поиск из одного текстового поля, а затем на странице результатов поиска упорядочивал результаты по классам.

Так, например, скажем, у меня настроены следующие модели для Thinking Sphinx: Post, Comment и User. (В моей ситуации у меня около 10 моделей, но для ясности в StackOverflow я притворяюсь, что их всего 3)

Когда я делаю поиск, похожий на: ThinkingSphinx.search 'search term', :classes => [Post, Comment, User] Я не уверен, что лучший способ перебрать результаты и построить разделы моей страницы.

Мое первое желание - сделать что-то вроде:

  1. Выполнить поиск
  2. Перебрать возвращенный набор результатов и выполнить result.is_a? (ClassType)
  3. На основе ClassType добавьте элемент в 1 из 3 массивов - @match_posts, @matching_comments или @matching_users
  4. Передайте эти 3 переменные экземпляра на мой взгляд

Есть ли лучший или более эффективный способ сделать это? Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Я думаю, что все сводится к тому, что полезно людям, использующим ваш сайт.Имеет ли смысл запускать один и тот же запрос для всех моделей?Тогда ThinkingSphinx.search, вероятно, лучше, особенно с точки зрения производительности.

Тем не менее, вы хотите сгруппировать результаты поиска по их соответствующим классам?Тогда некоторая сортировка необходима.Или вы разделяете результаты каждого класса, как поиск в GitHub?Тогда, возможно, стоит иметь отдельные коллекции, как то, о чем вы уже подумали.

На самом базовом уровне вы можете просто вернуть все отсортированные по релевантности, а не по классу, а затем просто отобразить немного другой результат в зависимости откаждый результат.Ситуация может помочь в этом - лучше всего сохранить как можно больше логики в помощниках и / или, возможно, частичных?

0 голосов
/ 25 сентября 2011

Если у вас есть только 3 модели для поиска, почему бы вам не использовать только model.search вместо ThinkingSphinx.search. Это решило бы вашу проблему выполнения result.is_a?. Это означает, что вам будет проще обрабатывать данные, отображаемые для каждого model.

...