solr之字段数据类型

来源:互联网 发布:杨紫为什么土 知乎 编辑:程序博客网 时间:2024/06/07 23:58

solr提供了内建的一些数据类型比如numbers, dates, geo location等类型;详情如下

每种数据类型都有一个Java类来管理。
这里主要讲讲以下几种类型
1. String fields
2. Date fields
3. Numeric fields

1. String fields

<fieldType name="string" class="solr.StrField"sortMissingLast="true" omitNorms="true"/>

它用在文本数据上,Solr provides the string field type for fields that contain structured values that shouldn’t be altered in any way.

2. Date fields

<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true"precisionStep="6" positionIncrementGap="0"/>

当你要用到日期的范围查询时,最好用这样的数据类型,而且在提交文档时日期的格式有特别要求,日期里有T,Z字符,比如有个timestamp字段设置为tdate类型了,那么提交时应该

<add><doc>...<field name="timestamp">2012-05-22T09:30:22Z</field>...</doc></add>

实际上这种日期格式是按ISO-8601 Date/Time格式来组织的,也就是yyyy-MMddTHH:
mm:ssZ。那么对于2016-05-22T09:30:22Z则有
yyyy = 2016
MM = 05
dd = 22
HH = 09 (24-hr clock)
mm = 30
ss = 22
Z = UTC Timezone (Z is for Zulu,起始时区)

如何设置时间的索引粒度呢?有时候我们并不需要查询精确到分秒级别,我们只需要查询到小时的范围即可,于是在提交文档的时候设置如下

<field name="timestamp">2016-05-22T09:30:22Z/HOUR</field>

/HOUR就告诉solr建索引的粒度为小时,那么索引里的这个时间就等价于2016-05-22T09:00:00Z
此外,它还支持一些特殊的keyword,比如NOW,DAY,可以用timestamp:[NOW/DAY TO NOW/DAY+1DAY}来进行范围查询

3. Numeric fields

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<field name="favorites_count" type="int" indexed="true" stored="true" />

这种类型的字段一般不好用来进行检索,但是它可以用来排序,如果你对string的字段排序它是按字典的顺序来排的,并不是按数字的大小来排的。

4. 一些高级用法

上面的介绍中可以看到positionIncrementGap这样配置属性,这些属性是一些高级用法,类似还有

属性 当设置为true时 sortMissingFirst 当排序时,检索结果里会列那些这个字段没有值的记录放在最前面 sortMissingLast 当排序时,检索结果里会列那些这个字段没有值的记录放在最后面 precisionStep 用在number类型的字段,表示精度 positionIncrementGap 用在字符短语,区分短语之间的间隔距离

precisionStep 和positionIncrementGap主要是为了提高范围查询的速度,原理比较复杂,stackoverflow上有个回答:
The precisionStep is a count, after how many bits of the indexed value a new term starts. The original value is always indexed in full precision. Precision step of 4 for a 32 bit value(integer) means terms with these bit counts: All 32, left 28, left 24, left 20, left 16, left 12, left 8, left 4 bits of the value (total 8 terms/value). A precision step of 26 would index 2 terms: all 32 bits and one single term with the remaining 6 bits from the left.

by David_Ao

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 每次月经头几天下不来怎么办 邮箱和安全问题都忘记了怎么办 大疆air无人机芯片过热怎么办 脸上反复冒痘痘闭口粉刺怎么办? 手被火烧伤起泡怎么办 手被打火机烧了怎么办 小孩手被火烧了怎么办 手指被火烧伤了怎么办 别人砸坏我家门怎么办 逆水寒经验满了怎么办 tcl魔环显示离线怎么办 城管执法局执法不公平怎么办 人被骗去搞传销怎么办 进了传销想出来怎么办 武汉江夏健康证怎么办 健康证条子掉了怎么办 送外卖的健康证怎么办 美团没有健康证怎么办 健康证不给补办怎么办 南京怎么办健康证去哪里办 浙江横店健康证怎么办 办健康证查乙肝怎么办 餐饮健康证丢了怎么办 办健康证吃了东西怎么办 吃宵夜脸肿了怎么办 晚上不吃宵夜饿了怎么办 办健康证身份证丢了怎么办 宁波二院怎么办健康证 健康证和培训证怎么办 楼下烧煤炉呛人怎么办 衣服染了笔渍怎么办 济宁二院怎么办健康证 刚按揭车的想卖怎么办 房子已过户银行不放贷怎么办 办房贷信用逾期给拒了怎么办 二手房过户了房贷下不来怎么办 没有房证的房子买卖怎么办 老公失踪房产证要他签字怎么办 税务机关对长期欠税怎么办 离婚有贷款的房子怎么办 买房没过户房主反悔怎么办