阅读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
答案 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')
}