Question

I have product_details table which belongs to categories. product_details has fields like id, name, price, discount and category_id and categories table has fields like id and name. Am using mysql database Am trying to do group product details based on category_id. To do grouping i referred https://gist.github.com/f987013b2feec5b28456. But am getting error the following error

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

My model looks like this

    class ProductDetail < ActiveRecord::Base
      belongs_to :category

      searchable do
        text :name
        integer :category_id
      end

    end

My controller looks like this

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

In my log file my getting like this

RSolr::Error::Http in ProductDetailsController#index

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

Request Data: "fq=type%3AProductDetail&fq=category_id_i%3A%281%29&start=0&rows=30&group=true&group.field=category_id&group.format=simple&q=%2A%3A%2A"

Backtrace: /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' 

Please help me. Thank you.

Was it helpful?

Solution

Two things here:

1.Grouping in Sunspot is only supported on string fields. So change your searchable block to the following:

class ProductDetail < ActiveRecord::Base
  belongs_to :category

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

2.Change the group params to reflect the attribute name change:

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

I assume here the sunspot is adding on the extra _s to the attribute when it indexes it.

OTHER TIPS

maybe in your schema.xml of your /usr/share/solr/conf there is missing a type integer?

here is mine as example:

<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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top