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. 分享知识-快乐自己:redis集群搭建

    Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...

  2. hdu 1003 Max Sum(基础dp)

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  3. Linux-NoSQL之Redis(二)

    一.Redis配置文件详解 1.通用配置 daemonize no  # 默认情况下,redis并不是以daemon形式来运行的.通过daemonize配置项可以控制redis的运行形式 pidfil ...

  4. BEC listen and translation exercise 37

    You're supposed to do that before 10.30 in the morning, but obviously, if it's an emergency, you can ...

  5. PS 滤镜——漩涡 vortex

    %%% Vortex %%% 漩涡效果 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS A ...

  6. C++ template 声明与定义

    今天编码的时候,发现了一个错误,就是模板代码在链接的时候找不到方法. 情况大概如下: 在 "Manager.h" 中 class Manager { public: templat ...

  7. ACM学习历程—BNUOJ3685 Building for UN(构造)

    The United Nations has decided to build a new headquarters in Saint Petersburg, Russia. It will have ...

  8. Unity3D中的Coroutine及其使用(延时、定时调用函数)

    http://blog.csdn.net/nizihabi/article/details/47606887 一.Coroutine(协程)的概念和本质 在网上的一些资料当中,一直将Coroutine ...

  9. C#中打开文件、目录、保存窗口

    打开文件代码: try { OpenFileDialog of = new OpenFileDialog(); of.ShowDialog(); txt_destFilePath.Text = of. ...

  10. kafka 基础知识梳理(转载)

    一.kafka 简介 kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据.这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因 ...