2

我正在尝试使用 SOLR 在我的 rails 应用程序中搜索部分单词。这需要更改 schema.xml 文件。正如其他人所建议的那样,我已经更新了我的“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

4

4 回答 4

3

我遇到了类似的问题,解决方案是重新启动您的 solr 实例并运行重新索引,bundle exec rake而不仅仅是rake

$ bundle exec rake sunspot:solr:stop 
$ bundle exec rake sunspot:solr:start 
$ bundle exec rake sunspot:reindex
于 2015-10-13T20:00:21.257 回答
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)。

(创可贴)解决方案是在那里编辑和使用文件。不过先备份一下。

于 2015-03-04T01:49:18.127 回答
1

您正在运行哪个版本的 Solr?我在使用 Solr 4 时遇到了类似的问题,它表明一旦 Solr 服务器重新启动,架构就会更新,但索引不会根据架构发生变化。在花费大量时间重新启动和重新建立索引之后,我使用更新的配置创建了一个新核心(一个新集合),这对我有用。

因此,尝试创建一个全新的核心,看看是否有帮助。祝你好运!

于 2013-01-27T11:58:48.327 回答
0

如果您使用的是 Solr 4,最好的解决方法是进入管理界面中的分析窗口,并针对您的索引和查询界面运行一些测试字符串。您可以在下拉列表中选择任何具有“文本”类型的字段或类型本身。

在您的特定设置中,您似乎在说,对于您想要匹配它的任何起始子集的每个单词,从 1 个前导字符(真的吗?)到 15。因此,如果有人搜索“a”,您将得到所有单词从'a'开始。那是你要的吗?

在尝试对黑子部分进行故障排除之前,请尝试所有这些。

于 2013-01-27T03:06:17.770 回答