Упорядочивание результатов ThinkingSphinx.search - PullRequest
2 голосов
/ 01 апреля 2011

Кто-нибудь смог отсортировать результаты поиска по запросу ThinkingSphinx для всего приложения?

У меня есть следующие настройки:

class Resource < ActiveRecord::Base

  # ... 

  define_index do
    indexes :title, :as => :sortable_name, :sortable => true
    indexes :tease
    indexes :description
    indexes authors(:name), :as => :author, :facet => true
  end

end

и

class Author < ActiveRecord::Base

  # ...

  define_index do
    indexes :name, :as => :sortable_name, :sortable => true
    indexes :title
    indexes :bio
  end

end

Я хочу иметь возможность искать по этим моделям (а также по 2 другим) и сортировать результаты по алфавиту. Поля, по которым нужно сортировать, могут иметь разные имена, поэтому я индексирую их, используя: as =>: sortable_name (предложения по улучшению этого способа приветствуются).

Следующие все работают как шарм:

Author.search 'something', :order => :sortable_name

Resource.search 'something', :order => :sortable_name

ThinkingSphinx.search 'something'

Но когда я пытаюсь

ThinkingSphinx.search 'something', :order => :sortable_name

Я получаю это:

ThinkingSphinx::SphinxError: index author_core,resource_core: sort-by attribute 'sortable_name' not found

Явное ограничение поиска этими классами с помощью: classes => [Author, Resource] не помогает. Я совершенно не понимаю, как здесь работает Сфинкс ...

Я перестроил свой индекс и остановил / начал процесс searchd, все с тем же результатом.

Rails 3.0.5 и ThinkingSphinx 2.0.2

Есть предложения?

1 Ответ

5 голосов
/ 03 апреля 2011

В примерах поиска по автору и ресурсам Thinking Sphinx имеет одну ссылку на модель, и поэтому может посмотреть на эту модель, чтобы найти ее поля, и преобразовать sortable_name в sortable_name_sort (атрибут, который фактически используется для сортировки).

Когда вы осуществляете поиск по нескольким моделям, Thinking Sphinx не углубляется в каждую модель, поэтому вам нужно быть немного более терпеливым, рассказывая, что делать.Попробуйте следующее:

ThinkingSphinx.search 'something', :order => :sortable_name_sort
...