Ruby on rails 如何启用与“的部分匹配?”;轨道太阳黑子;?
我刚安装好太阳黑子轨道,除了一件事,它似乎工作得很好。 我录了3张像下面这样的唱片Ruby on rails 如何启用与“的部分匹配?”;轨道太阳黑子;?,ruby-on-rails,sunspot-rails,Ruby On Rails,Sunspot Rails,我刚安装好太阳黑子轨道,除了一件事,它似乎工作得很好。 我录了3张像下面这样的唱片 姓名=约翰 name=John2 name=John3 当我用关键字“John”搜索时,只显示第一条记录。看起来完全匹配。 我希望所有这些都显示为搜索结果 这应该作为默认情况发生吗? 还是我设置错了???谢谢 来自女孩控制器的块(girls\u controller.rb) 来自女孩模型的块(Girl.rb) 如果希望在全文搜索中返回子字符串,可以查看 此外,您还可以添加一个文件sunspot_solr.rb,
如果希望在全文搜索中返回子字符串,可以查看 此外,您还可以添加一个文件
sunspot_solr.rb
,用于在myapp/config/initializers/中对结果进行分页:
Sunspot.config.pagination.default_per_page = 100
返回此案例的100个结果
增加:
您的schema.xml
文件位于yourappfolder/solr/conf
您还可以添加
以匹配任意子字符串
这是我对schema.xml的特定配置:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
</analyzer>
</fieldtype>
对我来说,它可以很好地处理所有关键字的完整字符串和子字符串。请不要忘记重新启动服务器并重新编制模型索引,以使更改生效。
问候 您是否可以发布您的模型和您的
模型中的可搜索的块。在控制器中搜索块?x1a4,谢谢!我试过了,但在添加了他们要求的行之后,没有结果。真奇怪:(啊,谢谢。在我添加了“Sunspot.config.pagination.default_per_page=100”之后,它似乎成功了,但另一个问题出现了:(现在我成功地在子字符串中搜索了关键字,它是英语语言,但不是多字节的日语。在添加行之前,它一直工作得很好。嗯……如果按照该说明进行操作,搜索结果只能是其起始字符与关键字匹配的记录。而不是包含关键字的记录字符串的中间。太复杂了。谢谢。如果这个响应是有效的,你必须接受这个响应。对于特殊字符,你看我已经添加了任意子串的修复。谢谢。如果记录的字段从搜索关键字开始,它显示为搜索结果。但是如果搜索关键字包含在中间或中。字符串的末尾,没有记录命中。
Sunspot.config.pagination.default_per_page = 100
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldtype class="solr.TextField" name="text_pre" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
</analyzer>
</fieldtype>