时间字段类型特别说明
Solr中提供的时间字段类型( DatePointField, DateRangeField,废除的TrieDateField )是以时间毫秒数来存储时间的。
要求字段值以ISO-8601标准格式来表示时间:YYYY-MM-DDThh:mm:ssZ
Z表示是UTC时间(注意:就没有时区了)。1999-05-20T17:33:18Z
秒上可以带小数来表示毫秒,超出精度部分会被忽略:
1972-05-20T17:33:18.772Z
1972-05-20T17:33:18.77Z 1972-05-20T17:33:18.7Z公元前:在前面加减号 - 9999后,在前面加加号 +
注意:查询时如果是直接的时间串,需要用转移符转义:
datefield:1972-05-20T17\:33\:18.772Z
datefield:"1972-05-20T17:33:18.772Z" datefield:[1972-05-20T17:33:18.772Z TO *]DateRangeField 时间段类型特别说明
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+2MONTHSNOW-1DAYNOW/HOURNOW+6MONTHS+3DAYS/DAY1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY
NOW在查询中使用时,可为NOW指定值
q=solr&fq=start_date:[* TO NOW]&NOW=1384387200000
EnumFieldType 枚举字段类别说明
EnumFieldType 用于字段值是一个枚举集,且排序顺序可预定的情况,如新闻分类这样的字段。定义非常简单:
enumsConfig:指定枚举值的配置文件,绝对路径或相对 内核conf/的相对路径
enumName:指定配置文件的枚举名。排序顺序是按配置的顺序。 docValues : 枚举类型字段必须设置 true;枚举配置示例
Not Available Low Medium High Urgent Unknown Very Low Low Medium High Critical
练习4 定义Field
prodId:商品id,字符串,不索引、存储;
name: 商品名称,字符串,分词、索引、存储 simpleIntro:商品简介,字符串,分词、索引、不存储 price:价格,整数(单位分),索引,存储 uptime:上架时间,索引、docValues 支持排序dynamic Field 动态字段
问:如果模式中有近百个字段需要定义,其中有很多字段的定义是相同,重复地定义是不是很烦?
可不可以定一个规则,字段名以某前缀开头或结尾的是相同的定义配置,那这些重复字段就只需要配置一个,保证提交的字段名称遵守这个前缀、后缀即可。这就是动态字段。 如:整型字段都是一样的定义,则可以定义一个动态字段如下:也可以是前缀,如 name=“i_*”
uniqueKey 唯一键
指定用作唯一键的字段,非必需。
id
唯一键字段不可以是保留字段、复制字段,且不能分词。
Similarity 相关性计算类配置
如果默认的相关性计算模型BM25Similarity不满足你应用的特殊需要,你可在schema中指定全局的或字段类型局部的相关性计算类
text_dfr I(F) B H3 900
小结
Schema API 介绍
内容概览
1、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: 更新一个存在的fieldTypeadd-copy-field: 添加一个复制字段规则.delete-copy-field: 删除一个复制字段规则.
2、V1、V2两个版本API说明
V1老版本的api,V2新版本的API,当前两个版本的API都支持,将来会统一到新版本。两个版本的API只是请求地址上的区别,参数没区别。
V1: http://localhost:8983/solr/gettingstarted/schemaV2: http://localhost:8983/api/cores/gettingstarted/schema
3、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
练习:
1、添加示例; 2、添加一个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
4、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:价格,整数(单位分),索引,存储,支持排序5、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
6、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
7、获取schema信息
获取整个schema
GET /collection/schema
可以通过wt请求参数指定返回的格式:json,xml, schema.xml
http://localhost:8983/api/cores/mycore/schema?wt=xml
获取字段
GET /collection/schema/fieldsGET /collection/schema/fields/fieldname
请求参数有:
wt: json/xml fl:指定需要返回的字段名,以逗号或空格间隔showDefaults:true/false ,是否返回字段的默认属性includeDynamic:true/false,在path中带有fieldname 或指定了 fl的情况下才有用。
获取动态字段
GET /collection/schema/dynamicfieldsGET /collection/schema/dynamicfields/name
可用请求参数:wt、showDefaults
http://localhost:8983/api/cores/mycore/schema/dynamicfields?wt=xml
获取字段类别
GET /collection/schema/fieldtypesGET /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的nameGET /collection/schema/version 获取schema的版本GET /collection/schema/uniquekey 获取唯一键字段GET /collection/schema/similarity 获取全局相关性计算类
可用请求参数:wt