Solr4.2 新特性 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=””/>
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实现,数字编码的值由基础反推出原始的数字,可以用于排序。
例子:
<field name=”specialCodes” type=”int” indexed=”false” stored=”false” multiValued=”true” docValues=”true”/>
配置不同的 Codec 实现
你可以通过设置fieldType的docValuesFormat属性来选择不同的实现。
要启用 per-field DocValues 格式, 必须在solrconfig.xml里面设置SchemaCodecFactory:
<codecFactory class=”solr.SchemaCodecFactory”/>
schema.xml下面的配置:
- docValuesFormat="Lucene42": 这是默认设置,所有数据会被加载到堆内存中。
- docValuesFormat="Disk": 这是另外一个实现,将部分数据存储在磁盘上。
- docValuesFormat="SimpleText": 文本格式,非常慢,用于学习。
Solr4.2 新特性 DocValues [转]的更多相关文章
- Solr新特性【4.x,5.x,6.x,7.x】
一.Solr4.x新特性 1.近实时搜索 Solr的近实时搜索[Near Real-Time,NRT]功能实现了文档添加到搜索的快速进行,以应对搜索快速变化的数据. 2.原子更新与乐观并发 原子更新功 ...
- Elasticsearch之elasticsearch5.x 新特性
其实,elasticsearch5.x 和 elasticsearch2.x 并不区别很大. 是因为,ELK里之前版本各种很混乱,直接升级到5.0了. 其实,elasticsearch5.x 按理来说 ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- [干货来袭]C#6.0新特性
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
- CSS3新特性应用之结构与布局
一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
- 跨平台的 .NET 运行环境 Mono 3.2 新特性
Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...
- Atitit opencv版本新特性attilax总结
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
随机推荐
- Linux使用sshfs挂载远程目录到本地
1安装sshfs [root@iZwz9hy7gff0kpg1swp1d3Z ~]# yum install sshfs 2创建本地目录 [root@iZwz9hy7gff0kpg1swp1d3Z ~ ...
- PS学习之如何把小姐姐塞进瓶子里
准备素材 开始制作 用PS新建一个国际通用纸张大小的画布 分辨率可以调为72 改变背景色 插入图片 水平居中对齐 插入木质素材 放大 覆盖之前的素材 调整图层顺序 创建剪切蒙版 对木桩添加曲线 设置立 ...
- 深入学习Motan系列(一)——入门及知识zookeeper储备
背景以及说明: 最近逮到个RPC框架,打算深入学习,框架千千万,只有懂得内部原理,才能应对复杂的业务,进行自定义化系统. 这个系列的Motan文章也是自己慢慢摸索的轨迹,将这个过程记录下来,一是提升自 ...
- HashMap<Integer, Bean> 根据Bean的属性进行排序
转载地址 已知一个HashMap<Integer,User>集合, User有name(String)和age(int)属性.请写一个方法实现对HashMap的排序功能,该方法接收Hash ...
- eclipse svn不能忽略文件及文件夹,ignore设置无效 ?
https://blog.csdn.net/zengmingen/article/details/79025445 https://blog.csdn.net/zengmingen/article/d ...
- LeetCode–Flip Game
You are playing the following Flip Game with your friend: Given a string that contains only these tw ...
- stl本子
记事本,不要想到奇怪的地方去 迭代器什么的不会玩quq set: #include<set> set<int> quq; quq.insert(qvq); -- 插入 quq. ...
- day12Flume、azkaban、sqoop
1.PS:Hive中好少有update这个方法,因为他主要是用来批量数据的处理分析. 2.PS:软连接和硬连接的区别 软连接就是我们普通和Windows系统一样的快捷方式,她也是一个文件 硬连接就是他 ...
- Python __name__变量
原文: http://blog.csdn.net/u011511601/article/details/53504355 Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执 ...
- 第2节 常用软件安装-JDK和Tomcat
本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...