其他模式元素
本节描述 schema.xml 中一些其他重要的元素。
唯一键
uniqueKey 元素指定了哪个字段是文档的唯一标识。
尽管 uniqueKey 不是必需的,但它在你的应用设计时几乎总是保证的。
例如,在你想更新索引中的文档时就需要使用 uniqueKey。
你可以通过名称来定义唯一键字段。
<uniqueKey>id</uniqueKey>
模式的默认字段和 copyField 字段不可用作填充 uniqueKey 字段。
你也不能使用 UUIDUpdateProcessorFactory 来自动生成 uniqueKey 的值。
更进一步,当 uniqueKey 字段被使用,但字段本身是多值的(或从 fieldType 继承了多值性)时,
操作会失败。
然而,uniqueKey 还能继续工作,只要字段是被适当地使用的。
默认搜索字段
若你在使用 Lucene 查询解析器,没有指定字段名称的查询将使用默认的搜索字段。
DisMax 和扩展的 DisMax 查询解析器在 qf 没有指定时,也会退化到默认搜索字段。
警告:
defaultSearchField元素的使用在 Solr 3.6+ 版本被废弃。 相反你应该使用df请求参数。某些程度上,defaultSearchField元素应该被移除。
更多查询解析器的信息,查看小节 查询语法和解析
查询解析器默认操作符
在有多个项的查询中, Solr 可以返回所有条件都匹配的结果或者某个或多个条件匹配的结果。
operator 控制了这个行为。
一个 AND operator 意味着所有的条件都必须满足,而一个 OR operator 意味着一或多个条件需为真。
在 schema.xml 中,solrQueryParser 元素控制了如果查询中没有制定操作符时应该使用哪个操作符。
默认的操作符设置仅对 Lucene 查询解析器有效,
而 DisMax 和扩展的 DisMax 查询解析器在其内部硬编码了它们的操作符为 OR。
警告:查询解析器默认操作符参数在 Solr 3.6+ 版本被废弃。 相反推荐你应该在你的请求处理器中指定查询解析器
q.op参数。
相似度
Similarity 是用于在搜索中给文档评分的 Lucene 类。
你可以声明一个全局的 <similarity> 用来指定一个你希望 Solr 在处理你的索引时使用的自定义的相似度实现。
一个 similarity 可以直接通过引用不带构造器参数的类的名称来指定:
<similarity class="solr.DefaultSimilarityFactory"/>
也可以引用一个带有可选初始化参数的 SimilarityFactory 实现:
<similarity class="solr.DFRSimilarityFactory"><str name="basicModel">P</str><str name="afterEffect">L</str><str name="normalization">H2</str><float name="c">7</float></similarity>
还有一个特殊的 SchemaSimilarityFactory 实现,它让独立的字段类型可以配置一个覆盖了默认行为的相似度:
<similarity class="solr.SchemaSimilarityFactory"/><fieldType name="text_ib"><analyzer/><similarity class="solr.IBSimilarityFactory"><str name="distribution">SPL</str><str name="lambda">DF</str><str name="normalization">H2</str></similarity></fieldType>
若字段类型没有明确配置相似度工厂,则会使用一个 DefaultSimilarity 实例。
上例显示了 DFRSimilarityFactory (随机分歧) 和 IBSimilarityFactory (使用基于信息的模型),
但还有很多中相似度实现可用,诸如 SweetSpotSimilarityFactory、BM25SimilarityFactory 等。
详见 Solr javadoc 中 相似度工厂。
