时间字段类型特别说明json
Solr中提供的时间字段类型( DatePointField, DateRangeField,废除的TrieDateField )是以时间毫秒数来存储时间的。api
要求字段值以ISO-8601标准格式来表示时间:YYYY-MM-DDThh:mm:ssZapp
Z表示是UTC时间(注意:就没有时区了)。1999-05-20T17:33:18Zcurl
秒上能够带小数来表示毫秒,超出精度部分会被忽略: post
1972-05-20T17:33:18.772Z
1972-05-20T17:33:18.77Z
1972-05-20T17:33:18.7Zurl
公元前:在前面加减号 - 9999后,在前面加加号 +spa
注意:查询时若是是直接的时间串,须要用转移符转义:code
datefield:1972-05-20T17\:33\:18.772Z
datefield:"1972-05-20T17:33:18.772Z"
datefield:[1972-05-20T17:33:18.772Z TO *]orm
DateRangeField 时间段类型特别说明xml
DateRangeField用来支持对时间段数据的索引,它遵照上一页讲到的时间格式,支持两种时间段表示方式:
方式一:截断日期,它表示整个日期跨度的精确指示。
方式二:范围语法 [ TO ] { TO }
2000-11 表示2000年11月整个月. 2000-11T13 表示200年11月天天的13点这一个小时 -0009 公元前10年,0000是公元前1年。 [2000-11-01 TO 2014-12-01] 日到日 [2014 TO 2014-12-01] 2014年开始到2014-12-01止. [* TO 2014-12-01] 2014-12-01(含)前.
时间数学表达式
Solr中还支持用 NOW +- 时间的数学表达式来灵活表示时间。语法 NOW +- 带单位的时间数,/单位 截断。可用来表示时间段。
NOW+2MONTHS NOW-1DAY NOW/HOUR NOW+6MONTHS+3DAYS/DAY 1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY
NOW在查询中使用时,可为NOW指定值
q=solr&fq=start_date:[* TO NOW]&NOW=1384387200000
EnumFieldType 枚举字段类别说明
EnumFieldType 用于字段值是一个枚举集,且排序顺序可预约的状况,如新闻分类这样的字段。定义很是简单:
<fieldType name="priorityLevel" class="solr.EnumFieldType" docValues="true" enumsConfig="enumsConfig.xml" enumName="priority"/>
enumsConfig:指定枚举值的配置文件,绝对路径或相对 内核conf/的相对路径
enumName:指定配置文件的枚举名。排序顺序是按配置的顺序。
docValues : 枚举类型字段必须设置 true;
枚举配置示例
<?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>
练习4 定义Field
prodId:商品id,字符串,不索引、存储;
name: 商品名称,字符串,分词、索引、存储
simpleIntro:商品简介,字符串,分词、索引、不存储
price:价格,整数(单位分),索引,存储
uptime:上架时间,索引、docValues 支持排序
<field name=“” type=“” default=“” indexed="true" stored="true"/>
dynamic Field 动态字段
问:若是模式中有近百个字段须要定义,其中有不少字段的定义是相同,重复地定义是否是很烦?
可不能够定一个规则,字段名以某前缀开头或结尾的是相同的定义配置,那这些重复字段就只须要配置一个,保证提交的字段名称遵照这个前缀、后缀便可。
这就是动态字段。
如:整型字段都是同样的定义,则能够定义一个动态字段以下:
<dynamicField name="*_i" type=“my_int" indexed="true" stored="true"/>
也能够是前缀,如 name=“i_*”
uniqueKey 惟一键
指定用做惟一键的字段,非必需。
<uniqueKey>id</uniqueKey>
惟一键字段不能够是保留字段、复制字段,且不能分词。
Similarity 相关性计算类配置
若是默认的相关性计算模型BM25Similarity不知足你应用的特殊须要,你可在schema中指定全局的或字段类型局部的相关性计算类
<similarity class="solr.SchemaSimilarityFactory"> <str name="defaultSimFromFieldType">text_dfr</str> </similarity> <fieldType name="text_dfr" class="solr.TextField"> <analyzer ... /> <similarity class="solr.DFRSimilarityFactory"> <str name="basicModel">I(F)</str> <str name="afterEffect">B</str> <str name="normalization">H3</str> <float name="mu">900</float> </similarity> </fieldType>
小结
内容概览
一、Schema操做API整体介绍
Solr中强烈推荐使用Schema API来管理集合/内核的模式信息,能够读、写模式信息。经过API来更新模式信息,solr将自动重载内核。可是请注意:模式修改并不会自动重索引已索引的文档,只会对后续的文档起做用,若是必要,你须要手动重索引(删除原来的,从新提交文档)。
更新 Schema
发送 post请求到 /collection/schema ,以JSON格式提交数据,在json中说明你要进行的更新操做及对应的数据(一次请求可进行多个操做),操做的定义见下页。
更新操做定义
add-field: 添加一个新字段. delete-field: 删除一个字段. replace-field: 替换一个字段,修改. add-dynamic-field: 添加一个新动态字段. delete-dynamic-field: 删除一个动态字段 replace-dynamic-field: 替换一个已存在的动态字段 add-field-type: 添加一个fieldType. delete-field-type: 删除一个fieldType. replace-field-type: 更新一个存在的fieldType add-copy-field: 添加一个复制字段规则. delete-copy-field: 删除一个复制字段规则.
二、V一、V2两个版本API说明
V1老版本的api,V2新版本的API,当前两个版本的API都支持,未来会统一到新版本。两个版本的API只是请求地址上的区别,参数没区别。
V1: http://localhost:8983/solr/gettingstarted/schema V2: http://localhost:8983/api/cores/gettingstarted/schema
三、FieldType字段类别操做
添加一个字段类别 add-field-type
一个Analyzer:
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-field-type" : { "name":"myNewTxtField", "class":"solr.TextField", "positionIncrementGap":"100", "analyzer" : { "tokenizer":{ "class":"solr.WhitespaceTokenizerFactory" }, "filters":[{ "class":"solr.WordDelimiterFilterFactory", "preserveOriginal":"0" }]}} }' http://localhost:8983/solr/gettingstarted/schema
两个Analyzer:
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-field-type":{ "name":"myNewTextField", "class":"solr.TextField", "indexAnalyzer":{ "tokenizer":{ "class":"solr.PathHierarchyTokenizerFactory", "delimiter":"/" }}, "queryAnalyzer":{ "tokenizer":{ "class":"solr.KeywordTokenizerFactory" }}} }' http://localhost:8983/api/cores/gettingstarted/schema
练习:
一、添加示例;
二、添加一个FieldType myNewZhText,索引的分词器用IKAnalyzer,查询的分词器用IKAnaylzer + 同义词Filter
删除一个字段类别 delete-field-type
curl -X POST -H 'Content-type:application/json' --data-binary '{ "delete-field-type":{ "name":"myNewTxtField" } }' http://localhost:8983/api/cores/gettingstarted/schema
替换一个字段类别 replace-field-type
curl -X POST -H 'Content-type:application/json' --data-binary '{ "replace-field-type":{ "name":"myNewTxtField", "class":"solr.TextField", "positionIncrementGap":"100", "analyzer":{ "tokenizer":{ "class":"solr.StandardTokenizerFactory" }}} }' http://localhost:8983/api/cores/gettingstarted/schema
四、Field 字段操做
添加一个字段 add-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-field":{ "name":"sell_by", "type":"pdate", "stored":true } }' http://localhost:8983/api/cores/gettingstarted/schema
删除一个字段 delete-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "delete-field" : { "name":"sell_by" } }' http://localhost:8983/api/cores/gettingstarted/schema
替换一个字段 replace-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "replace-field":{ "name":"sell_by", "type":"date", "stored":false } }' http://localhost:8983/api/cores/gettingstarted/schema
练习:
添加以下商品字段
type:商品类别,字符串,多值,不分词、索引,须要分面查询(docValues)
brand: 品牌,字符串,单值,不分词、索引,须要分面查询(docValues)
msales:月销量,整数,单值,索引、存储,支持排序
修改以下商品字段
price:价格,整数(单位分),索引,存储,支持排序
五、dynamicField 动态字段操做
添加一个动态字段 add-dynamic-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-dynamic-field":{ "name":"*_s", "type":"string", "stored":true } }' http://localhost:8983/api/cores/gettingstarted/schema
删除一个动态字段 delete-dynamic-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "delete-dynamic-field":{ "name":"*_s" } }' http://localhost:8983/api/cores/gettingstarted/schema
替换一个动态字段 replace-dynamic-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "replace-dynamic-field":{ "name":"*_s", "type":"text_general", "stored":false } }' http://localhost:8983/solr/gettingstarted/schema
六、copyField 复制字段操做
添加复制字段 add-copy-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-copy-field":{ "source":"shelf", "dest":[ "location", "catchall" ]} }' http://localhost:8983/api/cores/gettingstarted/schema
删除复制字段 delete-copy-field
curl -X POST -H 'Content-type:application/json' --data-binary '{ "delete-copy-field":{ "source":"shelf", "dest":"location" } }' http://localhost:8983/api/cores/gettingstarted/schema
一次请求多个操做示例-1
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-field-type":{ "name":"myNewTxtField", "class":"solr.TextField", "positionIncrementGap":"100", "analyzer":{"tokenizer":{ "class":"solr.WhitespaceTokenizerFactory" }, "filters":[{ "class":"solr.WordDelimiterFilterFactory", "preserveOriginal":"0" }]}}, "add-field" : { "name":"sell_by", "type":"myNewTxtField", "stored":true } }' http://localhost:8983/solr/gettingstarted/schema
一次请求多个操做示例-2
curl -X POST -H 'Content-type:application/json' --data-binary '{ "add-field":[ { "name":"shelf", "type":"myNewTxtField", "stored":true }, { "name":"location", "type":"myNewTxtField", "stored":true }] }' http://localhost:8983/solr/gettingstarted/schema
七、获取schema信息
获取整个schema
GET /collection/schema
能够经过wt请求参数指定返回的格式:json,xml, schema.xml
http://localhost:8983/api/cores/mycore/schema?wt=xml
获取字段
GET /collection/schema/fields GET /collection/schema/fields/fieldname
请求参数有:
wt: json/xml fl:指定须要返回的字段名,以逗号或空格间隔 showDefaults:true/false ,是否返回字段的默认属性 includeDynamic:true/false,在path中带有fieldname 或指定了 fl的状况下才有用。
获取动态字段
GET /collection/schema/dynamicfields GET /collection/schema/dynamicfields/name
可用请求参数:wt、showDefaults
http://localhost:8983/api/cores/mycore/schema/dynamicfields?wt=xml
获取字段类别
GET /collection/schema/fieldtypes GET /collection/schema/fieldtypes/name
可用请求参数:wt、showDefaults
http://localhost:8983/api/cores/mycore/schema/fieldtypes?wt=xml
获取复制字段
GET /collection/schema/copyfields
可用请求参数:wt、 source.fl、 dest.fl
获取其余信息
GET /collection/schema/name 获取schema的name GET /collection/schema/version 获取schema的版本 GET /collection/schema/uniquekey 获取惟一键字段 GET /collection/schema/similarity 获取全局相关性计算类
可用请求参数:wt