0

Sunspot のドキュメントを読んで、オートコンプリート フィールドを照会する方法を見つけようとしています。

ここのように作成します https://github.com/haitham/sunspot_autocomplete

ここに構成solr/conf/schema.xmlがあります

<types>
  .......
  <fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.LetterTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>
  <fieldType name="autosuggest" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" />
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.LetterTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>
  .....
</types>
<fields>
  ....
  <dynamicField name="*_ac" type="autocomplete" indexed="true"  stored="true"/>
  <dynamicField name="*_as" type="autosuggest" indexed="true"  stored="true"/>
  ....
</fields>

検索可能なフィールドを持つモデルがあります:

class Post < ActiveRecord::Base
  attr_accessible :text, :user_id

  has_one :user

  searchable do
    text :text
    integer :user_id, :references => User
    autocomplete :post_text, :using => :text
  end
end

次のようにオートコンプリート フィールドを検索しようとすると:

Sunspot.search(Post) { keywords('ra', :fields => :'autocomplete') }

エラーが発生します:

Sunspot::UnrecognizedFieldError: No text field configured for Post with name 'autocomplete'

私が間違っていることは何ですか?

アプリケーションを github で共有しました: https://github.com/pironim/my_sunspot_app.git

4

1 に答える 1

0

ウラジミール、

プラグインのドキュメントを使用していますが、実際にプラグインを使用しているようには見えません。プラグインを使用する必要はありません。カスタム フィールドを定義して、それを使用するように Sunspot に指示できます。

の構成はschema.xml問題ないようです。あなたのsearchableブロックでは、次のことを行います。

class Post < ActiveRecord::Base
  attr_accessible :text, :user_id

  has_one :user

  searchable do
    text :text, :stored => true, :as => :text_ac
    integer :user_id, :references => User
  end
end

この変更を行ったら、必ずrake sunspot:solr:stop=> rake sunspot:solr:start=>rake sunspot:solr:reindexにして、Sunspot と Solr が動的フィールドの使用法を認識できるようにします。

次に、検索するときは、次のようにします。

Sunspot.search(Post) { 
  keywords('ra') 
}
于 2012-07-21T18:33:47.860 に答える