太阳黑子如何查询特定领域

时间:2012-07-21 14:18:38

标签: ruby-on-rails solr sunspot sunspot-rails

阅读Sunspot文档我试图找到如何查询自动填充字段

我像这里一样创建 https://github.com/haitham/sunspot_autocomplete

这是config 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

1 个答案:

答案 0 :(得分: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 =&gt; rake sunspot:solr:start =&gt; rake sunspot:solr:reindex所以Sunspot和Solr知道动态字段的用法。

然后在搜索时,执行以下操作:

Sunspot.search(Post) { 
  keywords('ra') 
}