0

カテゴリに属する​​product_detailsテーブルがあります。product_detailsにはid、name、price、discount、category_idなどのフィールドがあり、categoriesテーブルには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

私のログファイルでは、このようになります

ProductDetailsController#indexのRSolr :: Error ::Http

RSolr :: Error::Http-400不正なリクエスト
エラー:未定義のフィールドcategory_id

リクエストデータ: "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"

バックトレース:/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 '

私を助けてください。ありがとうございました。

4

2 に答える 2

1

ここで 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属性にインデックスを付けるときに、属性に余分なものを追加していると仮定します。

于 2012-07-12T01:54:59.690 に答える
0

おそらく、/usr/share/solr/conf の schema.xml に整数型がありませんか?

これが私の例です:

<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>
于 2012-07-30T09:56:23.723 に答える