2014-02-12 5 views
0

У меня есть две модели: «A» и «B», и вы хотите искать объекты у обоих из них с помощью Thinking sphinx, но я хочу, чтобы все результаты модели «A» сначала, B». Как я могу это сделать? я прохожу следующие варианты Sphinx-запросуРезультаты мышления sphinx по запросу модели

{:match_mode=>:extended, :sort_mode=>:extended, :star=>true, :order=>"@relevance DESC", :ignore_errors=>true, :populate=>true, :per_page=>10, :retry_stale=>true, :classes => [A,B]} 

А затем получить результаты поиска с помощью:

ThinkingSphinx.search "*xy*", options 

Но это дает результаты в смешанной упорядоченности, в то время как мне все «A» объекты первый. Как я могу это сделать?

ответ

1

Самый простой способ добавить атрибут к индексам обеих моделей:

has "1", :as => :sort_order, :type => :integer 

число в пределах строки должны быть разными в зависимости от модели. И тогда ваш аргумент :order будет следующим:

:order => 'sort_order ASC, @relevance DESC' 
+0

Это хороший хак и будет полезен во многих местах. На данный момент я использовал параметр field-weight, чтобы придавать большее значение объектам модели A. Благодарю. – skadoosh

Смежные вопросы