Неопределенная ошибка поля в предложении группировки 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>