Как вернуть только первую запись с think_sphinx?

В типичном сценарии Rails, где мне нужна только первая и только одна запись, я бы сказал:

SomeModel.find(:first, :conditions => {:some_field => 'some_value'})

Как бы я спросил об этом, используя Thinking_sphinx? Я предполагаю или надеюсь, что это будет что-то вроде:

SomeModel.search :conditions => {:limit => 'first', :some_field => some_value} 

Однако я совершенно уверен, что это не сработает, поскольку это всего лишь желаемое за действительное. Любые подсказки?


person iamtoc    schedule 08.11.2011    source источник


Ответы (2)


Хм, боюсь некорректно сравнивать поиск по точному совпадению искомой фразы (первый пример) с полнотекстовым поиском, предоставляемым Sphinx (второй). При использовании первого запроса вы можете получить только одну первую запись с равным значением искомой. И если вы используете Sphinx, вы передаете функцию ранжирования, которая определяет, какое сопоставление лучше всего подходит для вас (например, если вы даете больше ключевых слов, вы можете указать, хотите ли вы сопоставить все ключевые слова в каждом документе или только одно ключевое слово в документе) . Если вы хотите узнать об этом больше, вы можете перейти по ссылке: http://sphinxsearch.com/blog/2010/08/17/how-sphinx-relevance-ranking-works/.

Однако можно получить первое совпадающее значение с помощью think-sphinx, например:

Article.search('sphinx relevance', :match_mode => :all).first
person Michał Czapko    schedule 08.11.2011

Попробуйте следующее, если вам нужно выполнить поиск в любом поле:

SomeModel.search "search term", :star => true, :page => 1, :per_page => 1

Но если вам нужен какой-то порядок, например столбец «имя»:

SomeModel.search "some_value", :order => "name DESC", :star => true, :page => 1, :per_page => 1

Если вам нужно выполнить поиск по определенному полю

SomeModel.search :conditions => {:some_field => 'some_value'}, :order => "name DESC", :star => true, :page => 1, :per_page => 1
person mustafaturan    schedule 09.11.2011