Какую часть этой установки Solr-Sunspot мне не хватает? - PullRequest
2 голосов
/ 20 января 2011

Я думал, что у меня все было просто ... но каждый раз, когда я делаю запрос по любому ключевому слову, он не загружает таблицы из SQL. Я не получаю ошибок.

user.rb

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end

users_controller.rb

class Admin::UsersController < Admin::ApplicationController

  def index
    s = Sunspot.search User do |query|
      query.keywords params[:q]
      query.any_of do |any_of|
        any_of.with(:first_name)
        any_of.with(:first_name)
        any_of.with(:email)
        any_of.with(:name)
      end
      query.paginate :page => (params[:page] && params[:page].to_i || 1), :per_page => 20
      query.order_by('created_at', 'desc')
    end

    s.execute!
    @users = s.results

    render :action => 'index'
  end

Тогда я побежал:

$> script/console
$> User.reindex

Когда я вообще ничего не ищу ... он успешно отображает все User результаты

Я верю Я должен превратить все эти строковые теги в текстовые теги, но это возвращает эту ошибку:

Sunspot::UnrecognizedFieldError in Admin/usersController#index

No field configured for User with name 'first_name'

Чего мне не хватает, чтобы заставить это отвечать на ключевые слова?

Ответы [ 2 ]

12 голосов
/ 20 января 2011

(более полное объяснение вашего собственного самостоятельного наблюдения.)

Относительно вашей настройки:

searchable do
  string  :first_name
  string  :last_name
  string  :name
  string  :email
  time    :created_at
end

Строка в Solr предназначена для точных совпадений. Он не был предварительно обработан или маркирован, как текстовый столбец. Эти литеральные совпадения используются для фильтрации («где имя категории равно« Продажа »»), огранки, сортировки и т. Д.

Скорее всего, вам нужно text полей. Текстовые поля маркируются с помощью Standard Tokenizer , в нижнем регистре - с помощью LowerCase Filter , а их точки и апострофы удаляются с помощью Standard Filter среди многих других возможных вариантов.

Когда люди думают о функциональности полнотекстового поиска Solr, они думают о том, как он обрабатывает text полей.

Кроме того, метод поиска Sunspot keywords по умолчанию выполняет поиск по всем вашим текстовым полям, что объясняет, почему вы не получаете результаты, когда добавляете keywords - в ваших документах нет текстовых полей для поиска.

Как вы заметили в своем самостоятельном наблюдении, вам нужно переключиться на text поля, чтобы получить ожидаемые результаты.

2 голосов
/ 20 января 2011

Это не совсем хороший ответ, но я считаю, что объединение строк и текстовых тегов вместе работает.Итак, моя модель пользователя выглядит так:

searchable do
  text  :first_name
  text  :last_name
  text  :name
  text  :email
  time  :created_at
  string :first_name
  string :last_name
  string :name
  string :email
end
...