一、schema.xml

schema.xml 文件包含了域的信息以及这些域在搜索期间是怎样分词和过滤的。不同的域类型包含了不同数据类型。Solr 使用 schema.xml 文件决定了如何创建索引和如何执行实时索引和查询。

二、schema.xml 的文档结构(也是 schema 的组成)

三、<types> 介绍:

<types>  部分允许我们定义一个 <fieldType> 列表,这些 <fieldType> 标签包含着作用于该类型的底层 Solr 类和其他的默认的选项。FieldType 的子类可以作为一个域类型的作用类,可以使用包全名和 Solr 别名(如果在默认的 Solr 包中)来进行引用。对于常见的数值类型(Integer,float等等),这里有多种实现方式,具体操作可以查看 SolrPlugins

1、<fieldType> 内部属性:

1)name:标识

2)class:和其他属性决定了这个 FieldType 的实际行为(都在 org.apache.solr.analysis 包下)

3)sortMissingLast=true|false:没有该指定字段的数据的 Document 排在有该指定字段数据的 Document 的后面

4)sortMissingFirst=true|false:没有该指定字段的数据的 Document 排在有该指定字段数据的 Document 的前面

5)indexed=true|false:该类型的域被索引

6)stored=true|false:该类型的域被存储

7)multiValued=true|false:该类型的字段是多个值的。

8)omitNorms=true|false:字段的长度不影响得分和在索引时不做 boost 处理时,设置它为 true。一般文本域不设置为 true。(当用 solr 或 Lucene 搜索时,如果想对不同类型的文档,或者对不同的域设置不同的权重,又或者对不同的搜索词语设置不同的权重时,就需要 boost 功能)

9)positionIncrementGap=true|false:定义在同一个文档中此类型数据的空白间隔,以避免短语匹配错误

10)autoGeneratePhraseQueries=true|false:true为精确查找,即 AND 关系;false为SHOULD关系,即为 OR 关系。

11)termVectors=true|false:如果字段被用来做近似搜索和高亮显示时,应设置为 true

12)compressed:字段是压缩的。这可能导致索引和搜索变慢,单减少了存储空间,只有 StrField 和 TextField 是可以压缩的,通常适合字段的长度超过 200 个字符。

13)precisionStep:用来数字类型域的范围查找。代表字段值分段保存的时候,截断精度的大小,其值越小,索引越大,查询速度越快。(Trie 树)

2、<analyzer>(分析器) 子标签:

一个分析器可以检查域的文本信息,并产生一个 token 流。通常使用中,只有 solr.TextField 类型的字段会专门制定一个分析器。最简单配置一个分析器的方式是使用<analyzer>元素,定制这个元素的 class 属性为一个完整的 Java 类名。这些类必须源自 org.apache.lucene.anlysis.Analyzer。

1)class:规定分析器类实际行为的类

2)type:分析器使用的阶段。type=index 代表建索引阶段;type=query 代表查询阶段,没有指定则都适用

3、<tokenizer>(分词器)子子标签:

将句子拆分成一个个词或词组。

1)class:分词器工厂类(注意这里是 Factory 而不是真正的分词器,它是通过工厂类来创建分词器实例的。所有工厂必须实现 org.apache.solr.analysis.TokenizerFactory,工厂产物也必须派生之 org.apache.lucene.analysis.TokenStream

4、<filter>(过滤器)子子标签:

在分词之后,接受 Token Stream 进一步处理,例如:全部转换为小写、事态处理,去掉语气词等等,最后输出 token Stream。

5、分析器、分词器和过滤器的使用规则:

1)分析器单独使用

<fieldType name="text_greek" class="solr.TextField"><analyzer class="org.apache.lucene.analysis.el.GreekAnalyzer"/></fieldType>

2)分析器、分词器组合

    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"><analyzer><tokenizer class="solr.WhitespaceTokenizerFactory"/></analyzer></fieldType>

3)分析器、分词器、过滤器组合(不指定type)

    <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"><analyzer><tokenizer class="solr.WhitespaceTokenizerFactory"/><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/><filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/><filter class="solr.LowerCaseFilterFactory"/><filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/><filter class="solr.EnglishMinimalStemFilterFactory"/><!-- this filter can remove any duplicate tokens that appear at the same position - sometimespossible with WordDelimiterFilter in conjuncton with stemming. 这个过滤能够去除在相同位置的任何重复的分词。--><filter class="solr.RemoveDuplicatesTokenFilterFactory"/></analyzer></fieldType>

4)分析器、分词器、过滤器组合(指定type)

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"><analyzer type="index"><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /><!-- in this example, we will only use synonyms at query time在这个例子中,我们仅仅在查询时用来同义词查询<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>--><filter class="solr.LowerCaseFilterFactory"/></analyzer><analyzer type="query"><tokenizer class="solr.StandardTokenizerFactory"/><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType>

注意:分词器和过滤器是从上到下顺序依次执行的。

Solr_专题:shema 之 types相关推荐

  1. 白塞尔公式_如何设计像乌塞尔这样的800人的婚礼

    白塞尔公式 As a design enthusiast, I've always dreamed about designing my "Yes I do" scene. Fin ...

  2. Android组件化专题 - 路由框架原理

    在路由框架之前,我们先了解什么是APT,并实践ButterKnife绑定findById的小功能.为什么先要讲解apt,因为路由的实现apt是核心的代码.看下面链接 APT 实践. 本文项目地址 为什 ...

  3. Android组件化专题-路由动态注入跳转参数以及获取其他模块的fragment

    上几篇组件化专题文章,我们对路由框架基本实现了,Activity之间当跳转和模块间当通信. 现在思考一个问题: 不管是在Activity或者Fragment,跳转都会传递一些参数,然后在对应对Acti ...

  4. 【Simulink专题】Simulink模型设置(三):代码生成

    前言 Simulink中模型设置是关乎着整个模型的运行模式以及代码生成样式,不同的设置关乎着不同的结果,今天就给大家讲解下作者对整个模型设置的理解,有疑问的地方还需要大家多多指出,谢谢 使用版本:MA ...

  5. 10、STL实用技术专题

    10.STL实用技术专题 10.1STL(标准模板库)理论基础 10.1.1基本概念 #include <iostream> #include <vector> #includ ...

  6. [转] mongoose 之Shema

    总 之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很,悟出来一个写一个吧.之前喜欢误打误撞,网上搜索一点解决一下问题,后来实在 ...

  7. mongoose 之Shema

    2019独角兽企业重金招聘Python工程师标准>>> 总 之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很 ...

  8. 5G QoS控制原理专题详解-基础概念(3)

    最近比较忙,很多文章公众号上排版完发了,没来得及发布到CSDN上,各位同学可以先关注公众号,以便可以及时收到新的详解文章. 3.1.1.10 5G QoS characteristics 5G QoS ...

  9. CF专题(长安大学)

    来暂时总结下这几天的CF专题吧-后续还会更新- A - Ichihime and Triangle: Ichihime is the current priestess of the Mahjong ...

最新文章

  1. 静态程序分析chapter2 - IR(Jimple) 和 CFG
  2. (二)图像处理技术概述
  3. Matlab-创建文字云
  4. (转载)深入理解Linux中内存管理---分段与分页简介
  5. 外星人入侵游戏--python实战 (附完整代码)
  6. linux uvc stm32,linux uvc深入理解(三)
  7. python迷宫小游戏代码_课内资源 - 基于python实现的迷宫游戏
  8. Broadwell I7-5775c/5675c BSOD 蓝屏问题
  9. Sass含中文目录编译报错
  10. 软件测试前景会被ai取代吗_软件测试人员可能很快会被AI程序取代
  11. 计算机进pe按键,win10下进入pe系统操作方法
  12. Ubuntu环境下配置巴斯勒相机及相机测试
  13. 笔记本触摸板操作手势
  14. 第47讲 Android Camera2 API AWB自动白平衡实战
  15. 【论文翻译】知识图谱论文中英对照翻译----(KnowLife:a versatile approach ... )
  16. ISA-95/B2MML教程 : 从用例到XML消息的整合实践
  17. 用C语言打印一个金字塔
  18. 使用函数节流思想避免 SAP UI5 应用里按钮短时间内被高频重复点击试读版
  19. 漏洞复现Influxdb,H2database,couchDB,ElasticSearch
  20. 综合布线工程测试技术

热门文章

  1. Beaver 论文阅读笔记
  2. 出场、入场动画大全,基于NineOldAndroids轻松实现动画效果
  3. 2021高考昆山中学成绩查询,高考成绩查询即将开始!昆山这几所高中本科率惊人…...
  4. [ASP.NET] 结合Web API在OWIN下实现OAuth
  5. php if多条件,php – 多个IF语句条件
  6. JS——如何利用js实现流星雨效果?
  7. Petya and Countryside
  8. ubuntu redis desktop manager 编译问题解决
  9. S.M.A.R.T. 参数(smartctl)计算硬盘精确健康值
  10. javaFX实现登录界面并跳转