5. <fieldType>

fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值。e.g. <fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 其中class属性中"solr"是org.apache.solr.schema这个包名的缩写。

fieldType的属性:

1)name  由字母、数字和下划线组成。不能以数字开头。此值用于前面<field>中的type属性的值。

2)class  此值表明索引并存储此fieldType的数据的类型(e.g 字符类型,数字类型,日期类型...)。如果此类不是solr提供的(自定义的或第三方的类),则不能用"solr.",需要写类的全路径名。

3)positionIncrementGap 值为整数,用于multiValued="true"的字段,指定多个值之间的距离,以防出现假的短语匹配。

比如描述书本作者的字段是有多个值的,假设有两个作者:John Smith 和 Mike Jackson,我们搜索"Smith Mike"这个作者,如果positionIncrementGap值设成0,则此记录就会被认为是匹配搜索条件的,实际上是不匹配的。对于这种情况,我们应该把此值设置成一个较大的值,比如100。

4) autoGeneratePhaseQueries 值为布尔类型。默认值为false。对于文本字段,如果设置为TRUE的话,Solr自动为相邻的terms生成短语查询。如果为FALSE,包含在双引号内的terms才会被认为是短语。

举个粟子:索引中的文本内容为:春花秋月何时了...一江春水向东流。    我们在搜索的输入框里输入"春花"(注意不输入两个双引号),如果autoGeneratePhaseQueries 为true,我们加上highlight的话,返回的匹配结果为: <em>春花</em>秋月何时了...一江春水向东流。     如果值为false,则返回结果为<em>春</em><em>花</em>秋月何时了...一江<em>春</em>水向东流。

如果值为false,我们还是想要进行短语查询,可在输入框里输入"春花"(注意需要加上两个双引号)。

5)docValuesFormat 自定义docValues的格式。设置此值的话,必须在solrconfig.xml里配置schema-aware codec。如:

<codecFactory class="solr.SchemaCodecFactory" />

在网上搜了一下,只看到有两个值 Memory 和 Disk。猜想这个属性的作用应该是定义docValues值是存在硬盘上还是存在内存中吧。

6)postingsFormat 自定义PostingsFormat。设置此值的话,必须在solrconfig.xml里配置schema-aware codec。不太清楚具体有什么用。

注:尽量不要使用docValuesFormat和postingFormat。Solr的guideline上有一段话,翻译如下:

仅当使用默认的codec 时,Lucene索引才支持向后兼容。因此,如果使用了这两个属性,那么将来想要升级到更高版本的Solr 时,需要你切换回默认的codec,然后优化现有的索引或者重新建立整个索引。

以下的属性也同时存在于<field>里,如果<field>里的值会覆盖<fieldType>里的值。

7)indexed 布尔值。true表示进行索引。

8)stored 布尔值。true表示进行存储。

9)docValues 布尔值。true表示field的值将会被存储于面向列的数据结构中。

10)sortMissingFirst 布尔值。true表示排序的时候,此field值为空的记录排在此field值不为空的记录的前面。

11)sortMissingLast 布尔值 。意思和sortMissingFirst相反。

12)multiValues 布尔值。

13)omitNorms 布尔值。

14)omitTermFreqAndPositions 布尔值。忽略term frequency, positions 和 payloads。所有非文本类型字段,此默认值是true。

15)omitPositions 布尔值。布尔值。忽略positions。

16)termVectors, termPositions, termOffsets 和 termPayloads 布尔值。

17)required 布尔值。

18)useDocValuesAsStored 布尔值。

19)large 布尔值。默认FALSE

fieldType里class属性的一些值:

    1)BinaryField 二进制数据

    2)BoolField 布尔值数据。以"1"、"T"和"t"开头的字符都被认为是true,其它都是false

    3)CollationField 参见 https://cwiki.apache.org/confluence/display/solr/Language+Analysis#LanguageAnalysis-UnicodeCollation

4)CurrencyField 支持货币及汇率。

    5)DateRangeField 日期

    6)ExternalFileField 从硬盘上的某个文件获取值

    7)EnumField 允许定义一组枚举值,用于对不能根据字母或数值排序的字段进行排序。

  <fieldType name="priorityLevel" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="priority" />

  enumsConfig的值是枚举值的配置文件。enumsConfig.xml 示例:

      <?xml version="1.0" ?>

      <enumsConfig>

        <enum name="priority"><!-- 上面<fieldType> 里的enumName的值 -->

          <value>Low</value>

          <value>Medium</value>

          <value>High</value>

        </enum>

        <enum name="risk"> ... 其它一些枚举名及其值列表  ...</enum>

      </enumsConfig>

    8)ICUCollationField 参见 https://cwiki.apache.org/confluence/display/solr/Language+Analysis#LanguageAnalysis-UnicodeCollation

    9)LatLonPointSpatialField 经纬度。用于空间搜索。通常表示为"lat,lon"

    10)PointType 单值多维度点值。个人理解是指坐标值,比如二维或二维坐标。

    11)PreAnalyzedField 参见 https://cwiki.apache.org/confluence/display/solr/Working+with+External+Files+and+Processes#WorkingwithExternalFilesandProcesses-ThePreAnalyzedFieldType

    12)RandomSortField 不包含值。在此类型的字段上排序,将会返回随机的排序结果。

    13)SpatialRecursivePrefixTreeFieldType 接受"latitue,logitude"格式的字符串或WKT格式。完全不明白是啥。

    14)StrField UTF-8或Unicode的字符串。用于较小的字段,并且不被切分或分析(个人理解:此字段的值不会被拆分,被做为一个整体进行索引)。限制小于32K

    15)TextField

    16)TrieDateField, TrieDoubleField, TrieFloatField, TrieIntField, TrieLongField 见下面的说明

    17)DatePointField, DoublePointField, FloatPointField, IntPointField, LongPointField 见下面的说明

    18)UUIDField 定义一个document的唯一值。官方文档提到在SolrCloud环境下,不能保证唯一性,不建议使用,推荐使用UUIDUpdateProcessorFactory去生成UUID。

另外,在solr给的sample文件里,对于数值类型,定义了如下三个fieldType(以int为例):

a). <fieldType name="pint" class="solr.IntPointField" docValues="true" />

b). <fieldType name="int" class="solr.TrieIntField" docValues="true" precisionStep="0" positionIncrementGap="0"/>

c). <fieldType name="tint" class="solr.TrieIntField" docValues="true" precisionStep="8" positionIncrementGap="0"/>

对于a),对于数值类型的field,索引时使用KD-trees。 sample文件里提到要比 Trie*Field更快更高效,但是不支持某些特性。并未说明不支持哪些特性,所以并不推荐使用

对于b),通常用于确定性搜索,比如要搜索年龄是18的人。

对于c),用于范围搜索,比如要搜索某个年龄段的人。

也就是说,我们如果要对某项数据(比如人的信息,其中包含年龄字段)进行索引,一个人有唯一的年龄值,但是我们搜索的时候,可能需要进行确定年龄的搜索和年龄段的搜索,那么我们就需要定义两个年龄相关的field,其中一个field的fieldType为int,另一个field的fieldType为tint。

对 precisionStep 的一些说明:

比如 单个车的价格是不一样的,我们通常会查询某个价格范围内的车子信息。假设所有车辆价格范围是1万~1000万,为了加快查询速度,会把这个价格区间划分为几个区间进行索引。precisionStep的值差不就是划分为多少个区间的意思。

下一篇

Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - Analyzer, tokenizer(4)

Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)的更多相关文章

  1. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)

    managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...

  2. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)

    自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...

  3. Solr 6.7学习笔记(04)-- Suggest

    当我们使用baidu或者Google时,你输入很少的字符,就会自动跳出来一些建议选项,在Solr里,我们称之为Suggest,在solrconfig.xml里做一些简单的配置,即可实现这一功能.配置如 ...

  4. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  6. OpenCV 学习笔记 02 使用opencv处理图像

    1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...

  7. SaToken学习笔记-02

    SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...

  8. Redis:学习笔记-02

    Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...

  9. Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(1)

    刚学Solr(版本6.7.0),新建一个core时,提示要求schema.xml文件,我找了半天也没在源码包中找到名为schema.xml的文件.这个版本其实用的是managed-schema文件,没 ...

随机推荐

  1. MySQL常用方法

    1.INSTR,例:INSTR(content,'\"SHOP_DES\"')>0,返回字符串在某一个字段的内容中第一次出现位置,没有为0 2.REPLACE,例:conte ...

  2. POJ1060 Modular multiplication of polynomials解题报告 (2011-12-09 20:27:53)

    Modular multiplication of polynomials Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3 ...

  3. css绝对对齐

    方法1:使用text-align:justify 能够兼容所有的浏览器,但是一定要在模块和模块或者字之间存在空格,换行符或者制表符,这样才能起作用 ;;} /* 说明: 1.IE中要实现块内单行两端对 ...

  4. BEC listen and translation exercise 42

    These were built for the workers towards the end of the eighteenth century, and they are still furni ...

  5. C++函数重载详解

    我们在开瓶瓶罐罐的时候,经常会遭遇因各种瓶口规格不同而找不到合适的工具的尴尬.所以有时候就为了开个瓶,家里要备多种规格的开瓶器.同样是开个瓶子嘛,何必这么麻烦?于是有人发明了多功能开瓶器,不管啤酒瓶汽 ...

  6. Qt Quick中的信号与槽

    在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容. 1. 链接QML类型的已知信号 QML中已有类型定义的信号分为两类:一类 ...

  7. Metaspoit的使用

    一.环境的使用和搭建 首先我的攻击机和靶机都搭建在虚拟机上,选用的是VMware Workstation Pro虚拟机. 攻击机选用的是Linux kali 2017.2版本,而靶机安装的是XP sp ...

  8. 搞事情 -- python之线程

    简介 操作系统线程理论 线程概念的引入背景 线程的特点 进程和线程的关系 使用线程的实际场景 用户级线程和内核级线程(了解) 线程和python 理论知识 线程的创建Threading.Thread类 ...

  9. LG3533 [POI2012]RAN-Rendezvous

    2791: [Poi2012]Rendezvous Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 259  Solved: 160[Submit][S ...

  10. JZOJ 1003【东莞市选2007】拦截导弹——dp

    题目:https://jzoj.net/senior/#main/show/1003 只要倒推一下第一次上升的最长和第一次下降的最长就行了.不用n^2logn,枚举了 j 还要用树状数组找值比自己大的 ...