字段

字段在 模式fields 元素中定义。一旦设置好字段类型,定义字段本身就很简单。

字段定义示例

以下示例定义了一个名为 price 的字段,其类型名为 float,默认值为 0.0indexedstored 属性显式设置为 true,而 float 字段类型上指定的任何其他属性都会被继承。

<field name="price" type="float" default="0.0" indexed="true" stored="true"/>

字段属性

字段定义可以具有以下属性

name

必需

默认值:无

字段的名称。字段名称应仅包含字母数字或下划线字符,且不能以数字开头。目前这不是严格强制执行的,但其他字段名称将不会获得所有组件的一流支持,并且不保证向后兼容性。以开头和结尾都有下划线(例如,_version_)的名称是保留的。

type

必需

默认值:无

此字段的 fieldType 的名称。这将在 fieldType 定义的 name 属性中找到。每个字段都必须有一个 type

default

可选

默认值:无

一个默认值,当它被索引时,会自动添加到任何在此字段中没有值的文档中。如果未指定此属性,则没有默认值。

可选字段类型覆盖属性

字段可以具有与字段类型相同的许多属性。下表中的属性如果在单个字段上指定,将覆盖该字段的 fieldType 上指定的该属性的任何显式值,或底层 fieldType 实现提供的任何隐式默认属性值。下表摘自 字段类型定义和属性,其中有更多详细信息

属性 描述 隐式默认值

已索引 (indexed)

如果为 true,则该字段的值可用于查询以检索匹配的文档。

true

已存储 (stored)

如果为 true,则可以通过查询检索该字段的实际值。

true

文档值 (docValues)

如果为 true,则该字段的值将被放入面向列的 DocValues 结构中。

对于大多数字段,默认为 true

sortMissingFirst, sortMissingLast

控制在排序字段不存在时文档的放置位置。

false

多值 (multiValued)

如果为 true,表示单个文档可能包含此字段类型的多个值。

false

不可反转 (uninvertible)

如果为 true,则表示 indexed="true" docValues="false" 字段可以在查询时“反转”,以构建大型内存数据结构来代替 DocValues

false

省略规范 (omitNorms)

如果为 true,则省略与此字段关联的规范(这将禁用该字段的长度规范化,并节省一些内存)。对于所有原始(非分析)字段类型,例如 int、float、data、bool 和 string,默认为 true。 只有全文(full-text)字段或需要索引时增强的字段才需要规范。

*

省略词频和位置 (omitTermFreqAndPositions)

如果为 true,则从该字段的 postings 中省略词频、位置和 payload。对于不需要该信息的字段,这可以提高性能。它还可以减少索引所需的存储空间。在此选项的字段上发出的依赖于位置的查询将静默失败,找不到文档。对于所有非文本字段类型,此属性默认为 true。

*

省略位置 (omitPositions)

omitTermFreqAndPositions 类似,但保留词频信息。

*

termVectors, termPositions, termOffsets, termPayloads

这些选项指示 Solr 为每个文档维护完整的词向量,可以选择包括这些向量中每个词出现的词位、偏移量和 payload 信息。这些可以用于加速高亮显示和其他辅助功能,但会在索引大小方面带来相当大的成本。对于 Solr 的典型用法,它们不是必需的。

false

必需 (required)

指示 Solr 拒绝任何尝试添加没有此字段值的文档。此属性默认为 false。

false

使用文档值作为存储 (useDocValuesAsStored)

如果该字段启用了 DocValues,则将其设置为 true 将允许该字段像存储字段一样返回(即使它具有 stored=false),当在 fl 参数中匹配“*”时。

true

大字段 (large)

大字段始终是延迟加载的,只有当实际值 < 512KB 时才会占用文档缓存中的空间。此选项需要 stored="true"multiValued="false"。它适用于可能具有非常大值的字段,这样它们就不会缓存在内存中。

false