我正在尝试使用SOLR在我的rails应用中搜索部分单词。这需要更改schema.xml文件。由其他人suggested,我已更新我的“app_root / 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 name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
进行这些更改后,我运行rake命令rake sunspot:reindex
并获得100%完整的重新索引结果。然后我启动我的服务器......但是,我仍然只收到完整单词的回复,而不是单词部分。
以防万一重要,这是我的Style模型的相关代码:
searchable do
text :full_name
#full_name is just one of Style's attribute columns
end
和执行获取的代码...
if params[:sSearch].present?
@search = Style.search do
fulltext params[:sSearch]
end
styles = @search.results
end
非常感谢任何帮助。
有关参考资料,请参阅:
https://github.com/sunspot/sunspot/blob/master/README.md
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.EdgeNGramFilterFactory
答案 0 :(得分:3)
我遇到了类似的问题,解决方法是重新启动您的solr实例并使用bundle exec rake
运行reindex而不只是rake
:
$ bundle exec rake sunspot:solr:stop
$ bundle exec rake sunspot:solr:start
$ bundle exec rake sunspot:reindex
答案 1 :(得分:2)
除非sunspot_solr-2.1.1版本中的某些内容发生了变化,否则Solr不会读取复制到[rails_root] / solr目录中的schema.xml。它正在读取位于gem文件中的schema.xml(大致在这里:/gems/sunspot_solr-2.1.1/solr/solr/conf/schema.xml)。
我能够通过更改该文件,重新启动服务器以及检查solr管理界面中的架构来验证这一点。
它在我的mac和我使用的虚拟盒子上以相同的方式工作(Ubuntu 14.04 LTS - Trusty Tahr)。
(创可贴)解决方案是在那里编辑和使用文件。不过,先备份它。
答案 2 :(得分:1)
您正在运行哪个版本的Solr?我在使用Solr 4时遇到了类似的问题,它表明一旦重新启动Solr服务器就会更新架构,但索引不会按照架构进行更改。在花了很多时间重新启动并重新编制索引之后,我创建了一个带有更新配置的新核心(一个新的集合),这对我有用。
因此,尝试创建一个完整的新核心,看看是否有帮助。祝你好运!
答案 3 :(得分:0)
如果您使用的是Solr 4,那么排除故障的最佳方法是进入管理界面的Analyze窗口,并针对您的索引和查询界面运行一些测试字符串。您可以在下拉列表中选择具有“文本”类型或类型本身的任何字段。
在你的具体设置上,你似乎在说每个单词你想要匹配它的任何起始子集,从1个主角(真的吗?)到15个。所以如果有人搜索'a',你会得到所有从'a'开始的单词。这就是你想要的吗?
在尝试对太阳黑子部分进行故障排除之前,请尝试全部。