设为首页 收藏本站
查看: 1560|回复: 0

[经验分享] Solr4.4 docValues解析和性能测试

[复制链接]

尚未签到

发表于 2015-11-12 09:51:39 | 显示全部楼层 |阅读模式
  
索引基本信息
  
  服务器IP:192.168.100.48
  
  schema.xml基本配置(简单列下,还有其他属性)
数据字段

类型

存储

索引

分词

docValues

  eventid
string

yes

yes

no


  securityobjectid
string

yes

yes

no


  eventname
string

yes

yes

yes


  message
text

yes

yes

yes


  receivetime
long

yes

yes

no

测试项

  
  分词器:IKAnalyzer
  
  数据量:15,000,000 条
  
  平均索引1w条索引耗时:3.5s
查询测试
  
  1、     receivetime属性设置docValues=”true”
  查询条件:message:permitted  receivetime desc
  耗时:0.8s
  2、     receivetime属性不设置docValues=”true”
  查询条件:message:permitted  receivetime desc
  耗时:0.9s
  
  千万级别的数据差别不是很大。
  
  解析docValues属性
  
原文地址http://wiki.apache.org/solr/DocValues
DocValues从Lucene4.2和Solr4.2开始加入,通过建立字段的正排索引,提升sorting, faceting, grouping, function queries等性能。
介绍
在Solr的配置文件(schema.xml)中,如果需要为一个Filed建立倒排索引,可以通过配置(indexed=”true”)来实现,DocValues是一种正排索引方式,通过设置(DocValues=”true”)来实现。
1、docvalues的特性
近实时索引:在每一个索引段里面都会有一个docvalues数据结构,这个结构与索引同时建立,并且能够快速更新、生效;
基本的查询和过滤支持:你可以做基本的词、范围等基本查询,但是不参与评分,并且速度较慢,如果你对速度和评分排序有要求,你可以讲该字段设置为(indexed=”true”)
更好的压缩比: Docvalues fields 的压缩效果比 fieldcache好,但不强调做到极致。
节约内存:你可以定义一个fieldType的 docValuesFormat (docValuesFormat="Disk"),这样的只有一小部分数据加载到内存,其它部分保留在磁盘上。

2、docvalues不能实现的
不能用来代替存储字段:这和字段存储完全不同,只是一些便于(sort/facet/group/join/scoring)检索的数据存储结构。
对于静态索引不是最有选择:如果你有一个完全不更新的索引,docvalues看起来不会很吸引你。另一方面如果你需要和fieldcache对比,继续往下看。
风险较大:这个功能在4.2版本整合到Solr,非常新,可能仍有一些未知的bug!

Lucene的 DocValues 格式
Lucene有四个基础字段类型可以使用docvalues。目前Solr使用了其中三种:

NUMERIC:每一个文档里面只有一个这样类型的单值字段。这就像在整个索引里有一个很大的long[],数据基于实际使用的值经过压缩的。
例如,假设有3个这样的文档:
doc[0] = 1005
doc[1] = 1006
doc[2] = 1005

在这个例子中,每个文档仅需要一个bit。

SORTED:每一个文档里面有一个这样类型的单值字段。这就像在整个索引里有一个很大的String[], 但用的是不同的寻址方式。.每一个唯一的value被赋予一个数字代表其顺序。所以每个文档只是记录一个压缩后的整数,有字典来还原他们原来的词。
例如,假设有3个这样的文档:
doc[0] = “aardvark”
doc[1] = “beaver”
doc[2] = “aardvark”

值 “aardvark” 被映射成0,”beaver”映射成1, 建立两个数据结构如下:
doc[0] = 0
doc[1] = 1
doc[2] = 0

term[0] = “aardvark”
term[1] = “beaver”

SORTED_SET: 每个文档里面有一个string类型的多值字段。这个和SORTED类型比较相似,每个文档有一个value的”set”。(按照递增存储)。 这里刻意的去除了重复的value,并且忽略了原有value的排序。
例如,假设有3个这样的文档:
doc[0] = “cat”, “aardvark”, “beaver”, “aardvark”
doc[1] =
doc[2] = “cat”

值 “aardvark” 被映射成0,”beaver”映射成1, “cat”映射成2,建立两个数据结构如下:
doc[0] = [0, 1, 2]
doc[1] = []
doc[2] = [2]

term[0] = “aardvark”
term[1] = “beaver”
term[2] = “cat”

BINARY: 每个文档存在一个 byte[] array。这个编码及数据结构可以由用户自定义。
Solr的 DocValues 类型
StrField (multiValued=false):这个背后实际上是由SORTED实现。对于要排序的字段,这是一个不错的选择。
例子:
<field name=”manu_exact” type=”str” indexed=”false” stored=”false” docValues=”true” default=”&quot;/>
StrField (multiValued=true):这个背后实际上是由SORTED_SET实现。
例子:
<field name=”productCategories” type=”str” indexed=”false” stored=”false” multiValued=”true” docValues=”true”/>

TrieXXXField (multiValued=false):这个背后实际上是由NUMERIC实现。这个对于排序字段或者用function queries打分的字段比较有益。
例子:
<field name=”popularity” type=”int” indexed=”false” stored=”false” docValues=”true” default=”0″/>

TrieXXXField (multiValued=true):这个背后实际上是由SORTED_SET实现,数字编码的&#20540;由基础反推出原始的数字,可以用于排序。
例子:
<field name=”specialCodes” type=”int” indexed=”false” stored=”false” multiValued=”true” docValues=”true”/>



配置不同的 Codec 实现

你可以通过设置fieldType的docValuesFormat属性来选择不同的实现。
要启用 per-field DocValues &#26684;式, 必须在solrconfig.xml里面设置SchemaCodecFactory:
<codecFactory class=”solr.SchemaCodecFactory”/>
schema.xml下面的配置:



  • docValuesFormat=&quot;Lucene42&quot;: 这是默认设置,所有数据会被加载到堆内存中。
  • docValuesFormat=&quot;Disk&quot;: 这是另外一个实现,将部分数据存储在磁盘上。
  • docValuesFormat=&quot;SimpleText&quot;: 文本&#26684;式,非常慢,用于学习。

  
  

  

  

         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138206-1-1.html 上篇帖子: Solr4.6删除数据的办法 下篇帖子: Solr5.2.1全文搜索服务器部署之linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表