第二部分 Documents, Fields, and Schema Design
| ||
这部分包含以下内容:
| ||
Solr Field Types:
solr中字段类型的详细信息.包含字段类型在solr默认的约束中.
Defining Fields: 描述如何在solr中定义字段. Copying Fields: 描述如何将一个字段中数据复制到另外一个字段中去 Dynamic Fields: 使用动态字段去捕捉那些没有在你索引中明确定义个字段. Schema API: 使用http请求的方式来获取schema中的信息或者去创建一个新的字段或者复制字段规则. Other Schema Elements: 描述solr schema中其他重要的元素. Putting the Pieces Together: 一个高级视角去观察solr schema和其中的元素如何工作. DocValues: 描述一个创建一个文档索引能被快速的查询到. Schemaless Mode: 自动添加以前未知的schema字段使用 value-based 字段类型猜测. | ||
对于字段的约束文件
如果使用的是managed-schema 可以更好 支持通过Schema API 编辑
schema.xml是老版本的,不支持使用Schema API进行编辑
如果使用了solrcloud模式,那么只能通过脚本上传和下载配置文件编辑后再上传了.
| ||
Solr Field Types 字段类型决定solr如何去解析和查询数据.很多类型solr已经默认定义了,你也可以自己定义字段的类型: 这部分主要包含一下内容点: Field Type Definitions and Properties Field Types Included with Solr Working with Currencies and Exchange Rates Working with Dates Working with Enum Fields Working with External Files and Processes Field Properties by Use Case Related Topics SchemaXML-DataTypes FieldType Javadoc | ||
Field Type Definitions and Properties (字段类型的定义和他的属性) 一个字段类型的定义可以包含四个部分的信息: 1.字段类型的名称(必须的) 2.具体实现类的名称(必须的) 3.如果这个字段类型是TextField ,需要定义一下这个字段类型的分词器相关属性 4.字段类型的属性---需要依赖实现的类,一些属性可能是强制的 Field Type Definitions in schema.xml 字段类型是被定义在schema.xml中.每个字段类型是被定义在 fieldtype 这个xml 标签之间. 他们能随意的根据字段类型进行分组.这是一个例子,定义了一个字段类型名字叫 text_general:
实现类主要确保字段经过正确的处理. 在schema.xml中,字符solr是org.apache.solr.schema或者org.apache.solr.analysis的缩写.实际上,solr.TextField 应该是 org.apache.solr.schema.TextField.. Field Type Properties 字段类型 class 定义了大多数的字段类型的行为信息.但是可选属性也是能被定义的. 例如下面的例子中,定义了一个名字为date类型的字段类型,定义了两个属性,sortMissingLast 和 omitNorms.
字段类型的属性能被分为三大类型:
1.字段类型class所指定的属性
2.solr对所有字段类型都支持的通用属性
3.字段的默认属性.你能更改这些属性代替默认值
General Properties
name : 类型名称(提了建议定义规则) class:前缀是solr.开头solr会自动搜索包,使用第三方要写全名称
positionIncrementGap: 对于多值字段,指定多个值之间的距离
autoGeneratePhraseQueries : true/false 是否生成临近的查询短语
docValuesFormat:定义使用这个字段类型的字段的文档值的类型.这里需要在sorconfig.xml配置解码器
postingsFormat:定义使用这个字段类型的字段的PostingsFormat规则.需要在solrconfig.xml中配置解码器;
解码器存在版本兼容问题,最好是升级版本后,做一次全量.
Field
Default Properties
默认值可以自己覆盖,和字段类型及版本也关系version="1.6"的默认值如下: 定义一个字段类型的时候可以参考
docvalues是啥???
Field Types Included with Solr
org.apache.solr.schema这个包里有默认的字段类即使 默认的实现类
类型很多,需要用时查取判断即可
<field name="uuid" type="UUID" default="NEW"/>
Working with Currencies and Exchange Rates
货币和汇率部分
配置:
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8"
defaultCurrency="USD" currencyConfig="currency.xml" /> 两种形式
一个是使用本地的配置(默认)
<fieldType name="currency" class="solr.CurrencyField"
precisionStep="8"
defaultCurrency="USD" currencyConfig="currency.xml" /> 一个是使用网上的汇率信息,定时更新
<fieldType name="currency" class="solr.CurrencyField" precisionStep="8"
providerClass="solr.OpenExchangeRatesOrgProvider" refreshInterval="60" ratesFileLocation="http://www.openexchangerates.org/api/latest.json?app_id=yourPerso nalAppIdKey"/> Working with Dates
Date Formatting
TrieDateField and DateRangeField DateTimeFormatter.ISO_INSTANT YYYY-MM-DDThh:mm:ssZ Z is a literal 'Z' character indicating that this string representation of the date is in UTC 查询需要转译
This is normally an invalid query:
datefield:1972-05-20T17:33:18.772Z These are valid queries: datefield:1972-05-20T17\:33\:18.772Z datefield:"1972-05-20T17:33:18.772Z" datefield:[1972-05-20T17:33:18.772 TO *] 这个感觉不是很好,直接用java的不行吗
Date Range Formatting
Date Math
支持表达式运算,当前时间可以用 now Date Math Syntax
能做加减运算和近似值,下面是接个例子:
For example: this represents a point in time two months from now:
NOW+2MONTHS This is one day ago: NOW-1DAY A slash is used to indicate rounding. This represents the beginning of the current hour: NOW/HOUR The following example computes (with millisecond precision) the point in time six months and three days into the future and then rounds that time to the beginning of that day: NOW+6MONTHS+3DAYS/DAY Note that while date math is most commonly used relative to NOW it can be applied to any fixed moment in time as well: 1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY Request Parameters That Affect Date Math
NOW
q=solr&fq=start_date:[* TO NOW]&NOW=1384387200000 TZ
More DateRangeField Details
Intersects (default), Contains, Within. fq={!field f=dateRange op=Contains}[2013 TO 2018] Working with Enum Fields
枚举类型,设置可选值,能预定义排序顺序.
Defining an EnumField in schema.xml
<fieldType name="priorityLevel" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="priority"/> <fieldType name="riskLevel" class="solr.EnumField" enumsConfig="enumsConfig.xml" enumName="risk" /> enumsConfig: 配置文件的名称,没有指定默认在conf下
enumName:配置文件中枚举使用类型的名称 <?xml
version="1.0" ?>
<enumsConfig> <enum name="priority"> <value>Not Available</value> <value>Low</value> <value>Medium</value> <value>High</value> <value>Urgent</value> </enum> <enum name="risk"> <value>Unknown</value> <value>Very Low</value> <value>Low</value> <value>Medium</value> <value>High</value> <value>Critical</value> </enum> </enumsConfig> 排序是不能改变的,只能在末尾添加.除非你改变后重新创建索引
Working with External Files and Processes
The ExternalFileField Type
外部文件是不能被索引的,只能通过查询函数查询或者展示.
存储那些不经常改变的.
<fieldType name="entryRankFile" keyField="pkId" defVal="0" stored="false"
indexed="false" class="solr.ExternalFileField" valType="pfloat"/> 默认的文件位置是在$SOLR_HOME/data 文件名称为external_fieldname or
external_fieldname.*
这里能看出来分布式的情况可能不能用 ,看看就行了
Field Properties by Use Case
定义一个字段类型时可以参考这张表,根据目的性
|
Solr入门之官方文档6.0阅读笔记系列(三)
最新推荐文章于 2020-07-24 12:29:10 发布