Неопределенная ошибка поля в предложении группировки sunspot_solr

У меня есть таблица product_details, которая относится к категориям. У product_details есть поля, такие как id, name, price, discount и category_id, а в таблице категорий есть поля, такие как id и name. Использую базу данных mysql. Пытаюсь сделать групповую информацию о продукте на основе category_id. Чтобы сделать группировку, я сослался на https://gist.github.com/f987013b2feec5b28456. Но получаю ошибку следующую ошибку

RSolr::Error::Http - 400 Bad Request
Error:     undefined field category_id

Моя модель выглядит так

    class ProductDetail < ActiveRecord::Base
      belongs_to :category

      searchable do
        text :name
        integer :category_id
      end

    end

Мой контроллер выглядит так

def index
      @search_res1=ProductDetail.search do

        adjust_solr_params do |params|
          params[:group] = true
          params[:"group.field"] = "category_id"
          params[:"group.format"] = "simple"
        end

      end.execute
      @navurls=@search_res1.results
end

В моем журнале я получаю вот так

RSolr:: Ошибка::Http в ProductDetailsController # index

RSolr:: Ошибка::Http - 400 неверный запрос
Ошибка: неопределенное поле category_id

Данные запроса: "fq=type%3AProductDetail&fq=category_id_i%3A%281%29&start=0&row =30&group=true&group.field=category_id&group.format=simple&q=%2A%3A%2A"

Обратный след: /home/toshiba/.rvm/gems/ruby-1.9.2-p290/gems/rsolr-1.0.8/lib/rsolr/client.rb:230:in `adapt_response'
/home/toshiba/.rvm/gems/ruby-1.9.2-p290/gems/rsolr-1.0.8/lib/rsolr/client.rb:167:in `execute'
/home/toshiba/.rvm/gems/ruby-1.9.2-p290/gems/rsolr-1.0.8/lib/rsolr/client.rb:161:in `send_and_receive' 

Пожалуйста, помогите мне. Спасибо.

2 ответа

Решение

Две вещи здесь:

1. Группировка в Sunspot поддерживается только на string поля. Так что поменяй searchable блок к следующему:

class ProductDetail < ActiveRecord::Base
  belongs_to :category

  searchable do
    text :name
    string :category_id_str do
      category_id.to_s
    end
  end
end

2. Измените параметры группы, чтобы они отражали изменение имени атрибута:

def index
  @search_res1=ProductDetail.search do
    adjust_solr_params do |params|
      params[:group] = true
      params[:"group.field"] = "category_id_str_s"
      params[:"group.format"] = "simple"
    end
  end.execute
  @navurls=@search_res1.results
end

Я предполагаю, что здесь пятно добавляет на _s к атрибуту, когда он индексирует его.

Может быть, в вашем schema.xml вашего /usr/share/solr/conf отсутствует целое число типа?

Вот мой пример:

<schema name="sunspot" version="1.0">
  <types>
    <!-- field type definitions. The "name" attribute is
       just a label to be used by field definitions.  The "class"
       attribute and any other attributes determine the real
       behavior of the fieldType.
         Class names starting with "solr" refer to java classes in the
       org.apache.solr.analysis package.
    -->
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="string" class="solr.StrField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="tdouble" class="solr.TrieDoubleField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="text" class="solr.TextField" omitNorms="false">
      <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StandardFilterFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="boolean" class="solr.BoolField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="date" class="solr.DateField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="sdouble" class="solr.SortableDoubleField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="sfloat" class="solr.SortableFloatField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="sint" class="solr.SortableIntField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="slong" class="solr.SortableLongField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="tint" class="solr.TrieIntField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="tfloat" class="solr.TrieFloatField" omitNorms="true"/>
    <!-- *** This fieldType is used by Sunspot! *** -->
    <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true"/>
  </types>
Другие вопросы по тегам