时间字段类型特别说明
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+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<www.dasheng178.com /value>
<value>Very Low</value>
<value>Low<www.mcyllpt.com www.tiaotiaoylzc.com/ /value>
<value>Medium<www.mushi157.com /value>
<value>High</value>
<value>Critical</value>
</enum>
</enumsConfig>
练习4 定义Field
prodId:商品id,字符串,不索引、存储;
name: 商品名称,字符串,分词、索引、存储
simpleIntro:商品简介,字符串,分词、索引、不存储
price:价格,整数(单位分),索引,存储
uptime:上架时间,索引、docValues 支持排序
<field name=“” type=“”www.fengshen157.com default=“www.michenggw.com ” indexed="true" stored="true"/>
dynamic Field 动态字段
问:如果模式中有近百个字段需要定义,其中有很多字段的定义是相同,重复地定义是不是很烦?
可不可以定一个规则,字段名以某前缀开头或结尾的是相同的定义配置,那这些重复字段就只需要配置一个,保证提交的字段名称遵守这个前缀、后缀即可。
这就是动态字段。
如:整型字段都是一样的定义,则可以定义一个动态字段如下:
<dynamicField name="*_i" type=“my_int" indexed="true" stored="true"/>
也可以是前缀,如 name=“i_*”