【问题标题】:Matching substrings in fulltext search not working全文搜索中的匹配子字符串不起作用
【发布时间】:2013-03-18 10:35:53
【问题描述】:

在我的 rails 应用程序中,我使用的是 solr 搜索。子字符串匹配在本地服务器上工作正常,但在我的部署服务器上匹配完整的单词。

可搜索块

searchable do
  text :firstname, :lastname, :login, :mail
  boolean :member
  integer :status
end

schema.xml 是。

<fieldType name="text" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" side="front" />
  </analyzer>
</fieldType>

我做错了什么?

【问题讨论】:

  • 两台服务器上的架构是否相同?你有没有重新索引你的数据?
  • 是的,两台服务器上的架构相同。但不知何故,它没有重新索引。删除 sunspot.yml 和 solr 目录后重新安装 sunspot_rails 就可以了。感谢您的评论:)

标签: ruby-on-rails ruby solr indexing sunspot-rails


【解决方案1】:

(在此处添加答案以告知您可能的不良行为)

仅供参考, 当您更改schema.xml 中的"text" fieldType 时,您正在更改应用程序中每个 索引文本字段的配置。有时这是不需要的,因为某些字段需要自定义配置。

例如,假设(无论出于何种原因)您希望以不同于其他文本字段的方式处理名字。假设您想添加名字的同义词。您将首先在您的schema.xml 中创建一个新的fieldType,名为first_name

<fieldtype name="first_name" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  </analyzer>
</fieldtype>

然后在schema.xml 文件的fields 部分中,您将添加两个新的动态字段

<dynamicField name="*_first_name"  stored="false" type="first_name" multiValued="false" indexed="true"/>
<dynamicField name="*_first_names" stored="true"  type="first_name" multiValued="false" indexed="true"/>

注意:dynamicField 名称上的“s”表示它是存储类型,为动态字段提供 * 有助于太阳黑子配置

因此,在您的 searchable 块中,您现在可以执行以下操作:

searchable do
  text :firstname, :as => :user_first_name
  text :lastname, :login, :mail
  boolean :member
  integer :status
end

这将使用您自定义配置的 "first_name" 字段。

如果您希望 first_name 是一个存储值(并且您仍想使用您的自定义配置),您将实现您的可搜索块,例如:

searchable do
  text :firstname, :stored => true, :as => :user_first_names
  text :lastname, :login, :mail
  boolean :member
  integer :status
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多