什么是docValues?
docValues是一种记录doc字段值的一种形式,在例如在结果排序和统计Facet查询时,需要通过docid取字段值的场景下是非常高效的。
为什么要使用docValues?
这种形式比老版本中利用fieldCache来实现正排查找更加高效,更加节省内存。倒排索引将字段内存切分成一个term列表,每个term都对应着一个docid列表,这样一种结构使得查询能够非常快速,因为term对应的docid是现成就有的。但是,利用它来做统计,排序,高亮操作的时候需要通过docid来找到,field的值却变得不那么高效了。之前lucene4.0之前会利用fieldCache在实例启动的时候预先将倒排索引的值load到内存中,问题是,如果文档多会导致预加载耗费大量时间,还会占用宝贵的内存资源。
索引在lucene4.0之后引入了新的机制docValues,可以将这个理解为正排索引,是面向列存储的。
DocValues和 field的存储值(field属性设置为stored=“true”)有什么区别?
docValues和document的stored=ture存储的值,都是正排索引,单也是有区别的:
l 存储方式:
DocValues是面向列的存储方式,stored=true是面向行的存储方式,如果通过fieldid取列的值可定是用docValues的存储结构更高效。
l 是否分词:
Stored=true的存储方式是不会分词的,会将字段原值进行保存,而docValues的保存的值会进行分词。
DocValues的实现
docValues的类型:
查了一下lucene的源码,发现DocValues有四种实现方式:
1. Memory
l 实现类:org.apache.lucene.codecs.memory.MemoryDocValuesFormat
运行时正排数据会全部加载到内存中,这部分数据在内存中是压缩存储的
2. Direct
l 实现类:org.apache.lucene.codecs.memory.DirectDocValuesFormat
导入到内存中不压缩使用,这个实际使用的效果应该和老版本的fieldcache差不多吧
3. SimpleText
l 实现类:org.apache.lucene.codecs.simpletext.SimpleTextDocValuesFormat
这个只是当娱乐只用,不用在环境中使用
以上三种类型定义在lucene-codecs-5.3.0.jar的META-INF/services目录下
4. Lucene50(默认使用)
l 实现类:org.apache.lucene.codecs.lucene50.Lucene50DocValuesFormat
Lucene50定义存放在lucene-core-5.3.0.jar的META-INF/services目录下
Lucene50的实现方式和Memory的实现方式大同小异,支持的字段类型更加丰富
在lucene50中将docValues的值分成5种类型:
1. Numeric
2. Binary
3. Sorted
4. SortedSet
5. SortedNumeric
类型是由Schema中的field类型决定的:
l StrField或者UUIDField
如果字段不是多值字段,则类型是SORTED
如果是多值字段,则类型是SORTED_SET
l 数值字段Trie*或者EnumField
如MultiValue=false,则NUMERIC
如MultiValued=true,则SORTED_SET
如何使用
Schema field字段设置
<field name="manu_exact"
type="string" indexed="false" stored="false"
docValues="true" />
另外可以通过fieldtype的docValuesFormat属性来设置docValue的实现策略:
<fieldType name="string_in_mem_dv"
class="solr.StrField" docValues="true"
docValuesFormat="Memory" />
总结
如果在索引上要进行facet,gourp,highlight等查询尽量使用docValue,这样不用为内存开销烦恼了。
例如:solr4.0之后都会需要在schema中设置一个_version_字段来实现对文档的原子操作,为了节省内存,可以加上docValues:
<field name="_version_"
type="long" indexed="true" stored="true" docValues="true"/>
一个朋友分析得不错的
http://blog.csdn.net/zteny/article/details/60633374
apache官方说明:
https://cwiki.apache.org/confluence/display/solr/DocValues
相关推荐
通过阅读“Solr使用详解.pdf”,你可以深入了解Solr的使用方法,掌握从安装配置到实际操作的全过程,从而更好地利用Solr解决实际的搜索和分析问题。同时,solrJ和IK分词器的使用将进一步提升你在Java环境中操作Solr...
《Solr热点功能详解与实践指南》 Solr,作为一款基于Apache Lucene的开源搜索服务器,其强大的全文搜索能力、高吞吐量的网络流量优化以及丰富的特性,使其成为企业级搜索应用的首选。本文将深入探讨Solr的主要功能...
### Solr开发详解 #### Solr简介 - **Solr** 是 Apache 软件基金会旗下的顶级开源项目之一,它是一款高性能的全文检索服务器。Solr 基于 Java 开发,利用 Lucene 作为其核心搜索引擎库。 - **特点**: - 可扩展性...
Solr是Apache软件基金会开发的一款高性能、全文搜索引擎,它提供了分布式搜索、索引和分析大量数据的能力。在本篇中,我们将深入探讨Solr 7.7.3的配置细节,并了解如何将其与Spring Boot 2.x进行整合,构建一个高效...
SpringBoot 整合 Solr 的方法详解 SpringBoot 整合 Solr 是一种常用的搜索引擎解决方案,通过 Solr 可以实现高效的搜索和检索功能。本文将详细介绍 SpringBoot 整合 Solr 的方法详解,并提供示例代码,以便读者更好...
solr7.5官方文档是pdf格式,经本人转换成doc,可供阅读参考
Solr 是一个开源的全文搜索引擎,由 Apache 软件基金会开发。版本 4.4.0 是 Solr 的一个重要里程碑,它包含了丰富的特性和改进。这个“solr-4.4.0.tgz”文件是一个针对 Linux 系统的压缩包,用于在服务器上部署 Solr...
Solr,全称为Apache Solr,是一款开源的全文搜索引擎,被广泛应用于企业级搜索解决方案中。它基于Lucene库,提供了高效、可扩展的搜索和分析能力。在处理多表join查询时,传统的关系型数据库如MySQL等通常能很好地...
Apache Solr是一款开源的企业级搜索平台,由Apache软件基金会维护。它是基于Java的,提供了高效、可扩展的全文检索、数据分析和分布式搜索功能。Solr-8.11.1是该软件的一个特定版本,包含了从早期版本到8.11.1的所有...
### Solr 4.7 服务搭建详细指南 #### 一、环境准备 为了搭建 Solr 4.7 服务,我们需要确保以下环境已经准备好: 1. **Java Development Kit (JDK) 1.7**:Solr 需要 Java 运行环境支持,这里我们选择 JDK 1.7 ...
### Solr 学习知识点详解 #### 一、Solr 概述 - **定义**:Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等 Servlet 容器中。 -...
Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,主要用来处理全文搜索和企业级的搜索应用。它基于Java,利用Lucene库构建,提供了高效、可扩展的搜索和导航功能。Solr-9.0.0是该软件的最新版本,此...
Apache Solr 是一个开源的全文搜索引擎,由Apache软件基金会维护,是Lucene项目的一部分。它提供了高效、可扩展的搜索和导航功能,广泛应用于企业级的搜索应用中。Solr-8.11.1是该软件的一个特定版本,包含了最新的...
Apache Solr 7.5是Apache Lucene项目的一个开源...总的来说,Apache Solr 7.5官方文档是开发人员、系统管理员和数据分析师必备的参考资料,无论选择PDF还是DOC格式,都能帮助读者深入理解并充分利用Solr的强大功能。
SolrJ、SolrCloud、Spring Data Solr的使用详解和工作原理;Solr的多种性能优化技巧,如索引的性能优化、缓存的性能 优化、查询的性能优化、JVM和Web容器的优化,以及操作系统级别的优化。 拓展知识中首先讲解了Solr...
Solr 的基本安装配置主要包括 Solr 配置所需包、Solr 配置文件详解和 Solr 服务配置说明三个部分。 Solr 配置所需包 Solr 需要的配置包主要包括 JDK、Apache Tomcat 和 Apache ZooKeeper 等。 Solr 配置文件详解 ...
solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...