【发布时间】:2011-05-25 20:16:48
【问题描述】:
Solr(通过 Lucene)支持不同的方式来指示字段在文档中的索引方式:索引、标记、存储……
我正在寻找一种将字段存储在 Solr 中但未编入索引的方法。有没有办法在 Sunspot 中实现这一目标?
【问题讨论】:
标签: lucene solr sunspot sunspot-rails
Solr(通过 Lucene)支持不同的方式来指示字段在文档中的索引方式:索引、标记、存储……
我正在寻找一种将字段存储在 Solr 中但未编入索引的方法。有没有办法在 Sunspot 中实现这一目标?
【问题讨论】:
标签: lucene solr sunspot sunspot-rails
Sunspot 的配置 DSL 支持其许多默认类型的 :stored => true 选项。对于存储字符串的示例,它会比我的第一个示例简单得多:
searchable do
string :name, :stored => true
end
这会生成一个字段名称 name_ss,对应于 Sunspot 标准架构中已经存在的以下 dynamicField:
<dynamicField name="*_ss" stored="true" type="string" multiValued="false" indexed="true"/>
您还可以在您的 schema.xml 中创建自己的自定义 field 或 dynamicField 以进行存储但不编入索引,然后使用 Sunspot 1.2 :as 选项指定相应的字段名称。
例如,上面的一个更详细的版本。在您的架构中:
<dynamicField name="*_stored_string" type="string" indexed="false" stored="true" />
在你的模型中:
searchable do
string :name, :as => 'name_stored_string'
end
【讨论】:
你可以试试:
http://localhost:8983/solr/admin/luke?numTerms=0
并使用 xpath 或正则表达式读取具有架构属性值的字段:
<str name="I">Indexed</str>
<str name="T">Tokenized</str>
<str name="S">Stored</str>
你会得到类似的东西:
<lst name="field">
<str name="type">stringGeneralType</str>
<str name="schema">--SM---------</str>
</lst>
【讨论】: