Подпишитесь на рассылку о самых интересных материалах в мире веб-разработки :)

Как включить сортировку связанной таблицы при использовании thinking_sphinx?


(dekanaxo) #1

К примеру есть две таблицы: книги (id, заголовок, дата) и авторы (id, имя, страна, дата). При поиске книги, я вывожу всю информацию об авторе. Т.е. по итогу, мы видим колонки:

books.id, books.title, books.created_at, authors.name, authors.country, authors.created_at

В обычно ситуации, я могу сортировать как угодно, передав в orders например authors.country desc. Однако, при работе с thinking_sphinx это как-то не выходит. Сейчас book_index.rb выглядит так:

ThinkingSphinx::Index.define :book, with: :real_time do
  indexes title, sortable: true
  indexes author.name, as: :author_name, sortable: true
  indexes author.country, as: :author_country, sortable: true

  has title, type: string
  has author.name, type: string
  has author.country, type: string
  has created_at, type: :timestamp
  has author.created_at, type: :timestamp
end

При поиске соответственно пишу:

Book.search params[:search], sql: {include: :author}, order: 'author_name asc'

В ответ получаю:

index book_core: sort_by attribute 'author_name' not found -
SELECT * FROM 'book_core' 
WHERE MATCH('blablabla') AND 'sphinx_deleted' = 0 
ORDER BY 'author_name' asc 
LIMIT 0, 50; SHOW META

Вопрос: что не так делаю? Т.е. мне хотелось бы иметь возможность сортировать данные не только по основной таблице (books), но и по атрибутам связанной.