Sunspot `LIKE` запрос - PullRequest
       14

Sunspot `LIKE` запрос

2 голосов
/ 10 мая 2011

Я использую sunspot.Как я могу выполнить запрос LIKE (LIKE %q%)?Я хотел бы сделать что-то вроде этого:

 @search = Sunspot.search(User) do |q|
   q.text_fields { with(:company_name).like(params[:q]) }
 end.results

вместо:

@search = Sunspot.search(User) do |q|
  q.text_fields { with(:company_name).starting_with(params[:q]) }
end.results

, что частично работает для меня.Просматривая код sunspot, я обнаружил этот фрагмент кода:

class StartingWith < Base
  private

  def to_solr_conditional
    "#{solr_value(@value)}*"
  end
end

По сути, он генерирует следующий хэш поиска пятна:

Sunspot.search(User) do |q| 
  q.text_fields { with(:company_name).starting_with("sta")} }
end

=> Sunspot::Search:{:q=>"*:*", :fq=>["type:User", "company_name_text:sta*"]} 

На случай, если не существует более простого способа реализации LIKE %query%, как мне создать новый класс Like с методом to_solr_conditional, который генерирует логику SOLR?

1 Ответ

3 голосов
/ 19 мая 2011

Если вы используете стандартный обработчик DisMax, он не поддерживает подстановочные знаки. У вас есть 2 варианта:

а. Активировать EdgeNGramFilter:

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer type="index">
    ..
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
    ..
  </analyzer>
</fieldType>

б. Используйте ночную сборку Solr с EDismax Handler .

См. вики-статью о документах по солнечным пятнам или аналогичный вопрос по SO .

...