Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 太阳黑子如何查询特定字段_Ruby On Rails_Solr_Sunspot_Sunspot Rails - Fatal编程技术网

Ruby on rails 太阳黑子如何查询特定字段

Ruby on rails 太阳黑子如何查询特定字段,ruby-on-rails,solr,sunspot,sunspot-rails,Ruby On Rails,Solr,Sunspot,Sunspot Rails,通过阅读太阳黑子文档,我试图找到如何查询自动完成字段 我像这里一样创建它们 下面是config solr/conf/schema.xml <types> ....... <fieldType name="autocomplete" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.L

通过阅读太阳黑子文档,我试图找到如何查询自动完成字段

我像这里一样创建它们

下面是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>
我得到一个错误:

Sunspot::UnrecognizedFieldError: No text field configured for Post with name 'autocomplete'
我做错了什么

我在github上共享了该应用程序:弗拉基米尔

您正在使用该插件的文档,但看起来您并没有实际使用该插件。您不需要使用插件,您可以定义一个自定义字段,并告诉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
Sunspot.search(Post) { 
  keywords('ra') 
}

插件添加支持*_ac和*_,因为没有it字段的类型不能很好地索引(我可以抓取一个这样做的文件并删除插件)。但是我能定义文本吗:文本;text:text,:as=>:text\u ac-保留我的常规搜索原样和自动完成-搜索*\u ac字段?我怎样才能在不影响已定义和工作的常规搜索的情况下,将*_ac字段添加到可搜索块中?我正在寻找可自动完成的查询。然后得到类似于['ra',rai',rail',rails']的结果我编辑了我的原始答案--看看我是如何添加
:autocomplete_text
属性的?它仍然使用相同的字段,但索引方式不同。您的解决方案允许使用一个单词进行搜索,但它甚至会影响常规查询,如Post.search{keywords's}。结果我希望创建不更改常规搜索的功能。这只是为了自动完成。
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
Sunspot.search(Post) { 
  keywords('ra') 
}