更新时间:2024-11-29 GMT+08:00

Solr配置集文件managed-schema

在添加文档到索引中时需要指定managed-schema,managed-schema文件主要包含三部分:字段(Field)、字段类型(FieldType)、唯一键(uniqueKey)。

当前Solr内核版本是8.11.2,在该版本中默认配置集使用managed-schema替代老版本中的schema.xml,该版本中新增及修改字段是修改managed-schema文件。如果继续使用老版本的配置集,要求solrconfig.xml和schema.xml都是老版本配套的配置文件,新增和修改字段还是修改schema.xml文件。solrconfig.xml文件中的 <schemaFactory class="ClassicIndexSchemaFactory"/>配置表示使用schema.xml, <schemaFactory class="ManagedIndexSchemaFactory"/>配置表示使用managed-schema,当前最新solrconfig.xml文件默认使用<schemaFactory class="ManagedIndexSchemaFactory"/>。

fields

“managed-schema”类似于数据表配置文件,定义了加入索引的数据类型,主要包括type、fields和其他的一些缺省设置。field是一条索引数据的基本单元,在“managed-schema”中,除了支持基本数值类型的field,还支持一些特别的field,比如较常用的“copyField”和“dynamicField”

  • field
    <field name="id" type="string" indexed="true" stored="true" required="true"/>
    <field name="name" type="text" indexed="true" stored="true" multiValued="true"/>

    “fields”节点内定义具体的字段(类似数据库的字段):

    • name:字段名
    • type:该字段类型
    • indexed:是否被用来建立索引(关系到搜索和排序)
    • stored:是否存储
    • multiValued:该字段是否包含多个值
  • copyField

    Solr有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段。

    <copyFieldsource="name"dest="text"/>

    在添加索引时,将所有被拷贝field(如name)中的数据拷贝到text field中。

    Solr搜索时,默认搜索text字段的内容,将name字段以及其他多个field的数据copy到text字段,可以将这些字段内容放在一起同时搜索,提高速度。

  • dynamicField
    动态字段(Dynamic fields)允许Solr索引没有在managed-schema中明确定义的字段。这动态字段可以让系统更灵活,通用性更强。
    <dynamicFieldname="*_i"type="int"indexed="true"stored="true"/>

    例如,managed-schema中定义了一个叫*_i的动态字段,没有定义cost_iprice_i的字段,在建索引的时候可以对cost_iprice_i进行索引。只需要以字母数字开头并以“_i”结尾的字段都可以按照*_i的动态字段进行索引。

重要参数

<uniqueKey>id</uniqueKey>

文档的唯一标识,必须填写这个“field”(除非该field被标记required="false"),否则Solr建立索引报错,默认的字段为“id”

<defaultSearchField>text</defaultSearchField>

默认搜索字段,如果搜索参数中没有指定具体的field,那么“text”作为默认的搜索域。

<solrQueryParser defaultOperator="OR"/>

搜索参数短语间的逻辑,默认为OR,若需要将搜索参数短语间的逻辑修改为与,则将这个参数值修改为AND