Алфавитный поиск WebSolr Ruby on Rails - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь выполнить алфавитный поиск в solr, но я не могу сделать это до этого момента

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

пример: если я нажму на букву "а", то должно получиться "муравей", "животное" и т. д.

, а не "банан", "camelo"

мой контроллер в настоящее время выглядит следующим образом:

@ article = Sunspot.search (Article) выполняет ключевые слова (params [: q]) paginate (: page => params [:page],: per_page => 20) order_by: релевантность,: desc order_by: article_order,: asc end

Кто-нибудь может помочь?заранее спасибо

1 Ответ

0 голосов
/ 07 июля 2011

Это немного зависит от того, как ваша модель настроена для индексации.

EdgeNGramFilterFactory

Добавьте EdgeNGramFilterFactory к типу текстового поля в вашем schema.xml или создайте новый тип для текстового поля, обработанного фильтром NGram.

EdgeNGramFilterFactory превращает каждый член в набор NGrams. «Собака» расшифровывается как «d», «do» и «dog».

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

'Начинается с' QueryFilter

Если проверяемое вами значение представляет собой простое скалярное строковое значение (название статьи, название категории, имя автора и т. Д.), То вы можете индексировать это значение в виде строки и искать совпадения с помощью фильтра запросов.

В Sunspot:

class Article
  searchable do
    # ...
    string :title
  end
end

@search = Sunspot.search(Article) do
  keywords(params[:q])
  paginate(:page => params[:page], :per_page => 20)
  where(:title).starting_with(params[:letter])
  order_by :relevance, :desc
  order_by :article_order, :asc
end
...