`

Solr数据结构配置(SchemaXml)

 
阅读更多

           schema.xml是用来定义索引数据中的域的,包括域名称,域类型,域是否索引,是否分词,是否存储,是否标准化即Norms,是否存储项向量等等。

     schema.xml配置文件的根元素就是schema,有个name属性,name属性值可以随便配,根元素没什么 好说的,schema元素下主要有两个标签元素即fieldfieldType,field表示域,用来定义域,fieldType用来定义域类型。

   1、  field元素有很多属性可以配置,我一一做个解释:

   name: 表示域的名称,是强制必须有的属性

     type: 域类型的名称,与fieldType元素的name属性值对应,也是强制必须有的属性,不可省

      required: 表示这个域是否是必须要在document中存在,默认值为false,如果此配置项设为true,则你的document中必须要添加此域,否则你创建索引时会抛异常,例如:Document is missing mandatory field:xxx之类的异常,由于lucene的索引结构是扁平化的,所以一般除了id主键域你可以设置为唯一域,其他域required建议保持默认值false即可

     indexed: true即表示需要对该域进行索引,一般如果你需要在该域上进行查询或排序时,则需要配置为true,默认值为false

     stored: 表示是否需要把域值存储到硬盘上,方便你后续查询时能再次提取出来原样显示给用户

     docValues: 表示此域是否需要添加一个docValues域,这对facet查询,group分组,排序,function查询有好处,尽管这个属性不是必须的,但他能加快索引数据加载,对NRT近实时搜索比较友好,且更节省内存,但它也有一些限制,比如当前docValues域只支持strField,UUIDField,Trie*Field等域,且要求域的域值是单值不能是多值域

     multiValued: 表示这个域是否可以存储多个值,若设置为true,即表示这是一个多值域

     omitNorms: 此属性若设置为true,即表示将忽略域值的长度标准化,忽略在索引过程中对当前域的权重设置,且会节省内存。只有全文本域或者你需要在索引创建过程中设置域的权重时才需要把这个值设为false,对于基本数据类型且不分词的域如intFeild,longField,StrField等默认此属性值就是true,否则默认就是false.

     termVectors: 设置为true即表示需要为该field存储项向量信息,当你需要MoreLikeThis功能时,则需要将此属性值设为true,这样会带来一些性能提升。

     termPositions: 是否存储Term的起始位置信息,这会增大索引的体积,但高亮功能需要依赖此项设置,否则无法高亮

     termOffsets: 表示是否存储索引的位置偏移量,高亮功能需要此项配置,当你使用SpanQuery时,此项配置会影响匹配的结果集

     field里还有两个比较难理解的域,是Solr扩展的,在Lucene中没有的概念,即dynamicField动态域和copyField复制域:

     动态域的属性配置跟普通的field差不多就不多说了,唯一有点区别就是name的属性值,可以用通配符,这样就可以模糊匹配多个域啦,这样设计的目的就是不用频繁的去修改我们的schema.xml中的field配置去增加field域啦,比如之前有个link_s域,某一天你想再增加一个url_s域,那你就需要去修改schema.xml配置文件,由于schema.xml修改过后需要重启tomcat才能生效,重启即意味着程序的中断,这往往是不可接受的。所以引入动态域来避免频繁添加修改域,但前提是你的域需要符合你提前定义的动态域的域名称命名规则哦。

     复制域即表示把某个域的值复制到一个目标域上面,那如果把多个域的值复制到一个目标域上面呢,你可以进行多次复制,体现到XML配置上就是类似这样的配置:

     <copyField source="title" dest="text"/>

     <copyField source="body" dest="text"/>

     如上配置就表示把titlebody这两个域的值全部复制到text这个新域上面,唯一要注意的是,如果你只是复制单个域,那么如果你被复制域本身就是多值域,那么目标域也是多值域,这毋庸置疑,那如果你复制的是多个域,只要其中有一个域是多值域,那么目标域就一定是多值域,这点一定要谨记。

    2、fieldType元素,它用来定义域类型,solr内置的域类有StrFieldBoolFieldTrieIntFieldTrieFloatFieldTrieLongFieldTrieDoubleField

 TrieDateFieldBinaryFieldRandomSortFieldTextField等,其他更多域类型请自己查阅Solr API文档。

     StrField:这是一个不分词的字符串域,它支持docValues域,但当为其添加了docValues域,则要求只能是单值域且该域必须存在或者该域有默认值

     BoolFieldboolean域,对应true/false

     TrieIntField, TrieFloatField, TrieLongField, TrieDoubleField这几个都是默认的数字域,precisionStep属性一般用于数字范围查询,precisionStep值越小,则索引时该域的域值分出的token个数越多,会增大硬盘上索引的体积,但它会加快数字范围检索的响应速度,positionIncrementGap属性表示如果当前域是多值域时,多个值之间的间距,单值域,设置此项无意义。

      TrieDateField:显然这是一个日期域类型,不过遗憾的是它支持1995-12-31T23:59:59Z这种格式的日期,比较坑爹,为此我自定义了一个TrieCNDateField域类型,用于支持国人比较喜欢的yyyy-MM-dd HH:mm:ss格式的日期。源码请参见我的上一篇博客。

      BinaryField:经过base64编码的字符串域类型,即你需要把binary数据进行base64编码才能被solr进行索引。

      RandomSortField:随机排序域类型,当你需要实现伪随机排序时,请使用此域类型。

      TextField:是用的最多的一种域类型,它需要进行分词,所以它一般需要配置分词器

。至于具体它如何配置IK分词器,留到后续再说,这里就不展开了。

     

      最后需要说的就是uniqueKey元素,它用来配置document的唯一标识域,即solr是用此域来决定增量导入时是否重复导入,如果id一样,则不会重复导入,或者当你更新索引时,你可以根据指定的uniqueKey域,来确定一个document,然后对该document进行更新。总之,它是用来唯一确定一个document的,跟数据库表里的主键id概念类似,前提是你uniqueKey里配置的域名称你需要提前使用field元素进行定义。

      fieldType元素还有一些额外的属性也需要注意下,比如sortMissingFirst,sortMissingLast等: 

      sortMissingLast表示如果域值为null,在根据当前域进行排序时,把包含null值的document排在最后一位,

      sortMissingFirst:与sortMissingLast对应的,不言自明了,你应该懂的。

      docValues:表示是否为docValues域,一般排序,group,facet时会用到docValues域。

分享到:
评论

相关推荐

    Solr安装与配置

    对于分词搜索的配置,首先需要解压 Solr 的 war 包到一个新的目录,比如 `E:\solr`,然后在 Solr 的 `example\multicore` 目录下创建或修改 `schema.xml` 文件,定义用于分词索引的字段。这些字段名需要与后续分词...

    solr_solr_

    在本配置文件中,我们关注的是`manageschema`配置,这是Solr用来管理其Schema XML的一种工具,用于定义字段类型和字段,以及它们如何被索引和搜索。 在Solr中,Schema是核心组件之一,它定义了文档的结构和处理方式...

    图解Solr5.3.1与MySQL配置【原创】

    **Schema** 是Solr的核心配置之一,它定义了索引结构、字段类型以及索引时的一些特殊处理逻辑。在`[solrhome]/test/conf`目录下创建或修改`schema.xml`文件,以确保Solr能够正确解析并索引来自MySQL的数据。 - **...

    solr检索服务器配置

    Schema.xml文件是Solr的核心配置文件,用于定义索引字段和字段类型。例如,你可以添加一个名为`title`的字段,类型为`text_general`,用于存储文档标题。确保修改`schema.xml`后重启Solr服务。 六、导入数据 Solr...

    solr-7.7.3配置详解,跟springboot整合 (二)

    - `solrconfig.xml`:这是Solr的主要配置文件,用于设置索引、查询、缓存等行为。 - `schema.xml`:定义字段类型和字段,用于解析和存储文档内容。 3. **SolrCloud模式** - 在分布式环境中,Solr运行在SolrCloud...

    solr6.5.1定时增量apache-solr-dataimportscheduler

    `solr-dataimporthandler-extras-6.5.1.jar` 包含了DIH的额外组件和功能,例如支持更多类型的数据库连接器、处理复杂的数据结构等。这些额外的功能使得DIH能够处理更广泛的业务需求,增强了Solr与外部数据源集成的...

    Solr操作说明文档

    solrconfig.xml 文件用于配置 Solr 的搜索引擎参数,而 schema.xml 文件用于配置 Solr 的索引结构。 Solr 服务配置说明 Solr 服务配置主要包括服务端口号、服务协议和服务超时时间等参数的配置。 Solr Admin 说明...

    Solr配置入门教程

    Solr配置入门教程主要涉及如何将数据从MySQL数据库和XML文件导入到Solr索引中。以下是详细步骤和相关知识点: 1. **下载与解压Solr**:首先需要从官方源获取Apache Solr的最新版本,并将其解压缩到一个合适的文件夹...

    Solr(Cloudera)使用手册

    ### Solr(Cloudera)使用手册 ...综上所述,Solr(Cloudera)的使用涉及多个方面,从创建和管理Collection、配置Schema到数据导入、中文分词处理,再到监控和缓存机制的应用等,都需要进行细致的规划和配置。

    Solr的配置

    `conf`目录包含关键配置文件`schema.xml`和`solrconfig.xml`。 - **`core.properties`**:记录当前Core的名称、索引位置、配置文件名称等信息。通常建议Core名称与文件夹名称保持一致。 - **`schema.xml`**:定义...

    solr 全量数据迁移

    数据结构通常指的是索引的配置文件,如schema.xml、solrconfig.xml等。而数据则指的是索引文件,包括文档数据、倒排索引等。 迁移步骤如下: 1. **确定源和目标位置**:例如,源数据位于`/mydata/solr/solr-6.9.0/...

    solr5.3.1 导入mysql数据

    总之,将 MySQL 数据导入 Solr 5.3.1 需要正确配置 Schema.xml 和 DataConfig.xml,然后利用 DataImportHandler 完成数据迁移。这一过程对于构建高效、可扩展的全文搜索引擎至关重要。通过熟练掌握这些知识,可以...

    Solr项目源码及solr资源包

    资源文件(src/main/resources),可能包含Solr配置文件如schema.xml和solrconfig.xml;测试代码(src/test/java),用于验证Solr操作的正确性。 4. **Solr配置文件**: - **schema.xml**:定义了索引的字段类型和...

    Solr的Multicore(分片)配置

    这包括复制Solr的配置文件(如`schema.xml`)到对应的核心目录,并根据具体需求修改这些文件,定义索引字段结构。此外,还需要在应用环境根目录`/solr/`下创建并编辑`solr.xml`,以定义各个核心的名字和实例目录。...

    solr4.7服务搭建

    1. **修改 schema.xml 文件**:打开 `D:\solr\home` 目录下的 schema.xml 文件,增加或修改以下字段类型定义: ```xml &lt;fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100"&gt; ...

    solr导航搜索工具+文档+配置代码

    3. 配置Schema:定义文档的字段类型和字段,如文本、数字、日期等,并设置索引和查询属性。 4. 索引数据:使用Solr的HTTP API或客户端库导入数据,建立索引。 5. 查询数据:通过HTTP请求发送查询,Solr返回匹配的...

    solr4.7.2服务器tomcat集成

    这些配置文件包括`solrconfig.xml`(Solr的主要配置文件)、`schema.xml`(定义字段和索引结构)以及`managed-schema`(对于较新版本的Solr,用于替代`schema.xml`)。 3. **启动Tomcat**:进入Tomcat的`bin`目录,...

    Solr开发指南.pdf

    配置SolrCore时,需要创建相应的目录结构,并配置solrconfig.xml和schema.xml文件来定义索引结构和搜索行为。 【Solr入门】 - Schema配置:Schema是Solr的核心配置之一,用于定义字段类型和字段,影响索引和搜索...

    Apache Solr(solr-8.11.1.zip)

    `schema.xml`(在较新版本中为managed schema)用于定义字段类型和字段,以及文档结构。 5. **请求处理器**:Solr提供多种请求处理器,如标准请求处理器(StandardRequestHandler)用于处理默认的搜索请求,更新...

Global site tag (gtag.js) - Google Analytics