lucene索引文件大小优化小结

1 数值数据类型索引优化

1.1 数值类型索引问题

lucene本质上是一个全文检索引擎而非传统的数据库系统,它基于倒排索引,非常适合处理文本,而处理数值类型却不是强项。

1.2  lucene解决方法

为解决这一问题, Schindler和 Diepenbroek提出了基于trie的解决方法,此方法08年发表在 Computers & Geosciences (地理信息科学sci期刊,影响因子1.9)

1.3 索引文件大小优化方案

我们的应用中很多field都是数值类型,比如id、avescore(评价分)、price(价格)等等,但是用于区间范围查询的数值类型非常少,大部分都是直接查询或者为进行排序使用。

因此优化方法非常简单,将不需要使用范围查询的数字字段设置precisionstep为Intger.max,这样数字写入倒排仅存一个term,能极大降低term数量。

1.4 效果

优化之后效果明显,索引压缩包大小直接减少了一倍。

2 空间数据类型索引优化

2.1 地理数据索引问题

还是一样的话,lucene基于倒排索引,非常适合文本,而对于空间类型数据却不是强项。

举个应用场景,每一个商家都有唯一的经纬度坐标(x, y),用户想筛选附近5千米的商家。

2.2  lucene解决方法

lucene采用geohash的方法对经纬度进行编码(geohash介绍参见:GeoHash)。简单描述下,geohash对空间不断进行划分并对每一个划分子空间进行编码,比如我们整个北京地区被编码为“w”,那么再对北京一分为4,某一子空间编码为“WX”,对“WX”子空间再进行划分,对各个子空间再进行标识,例如“WX4”(简单可以这么理解)。

2.3 索引文件大小优化方案

上述方法本质上也是一种以空间换时间的方法,比如一个经纬度(x,y),只有两个字段,但是以geohash进行编码将产生许多term并写入倒排。

lucene默认最长的geohash长度为24,也就是一个经纬度将以24个字符串的形式来写入到倒排中。最初采用的geohash长度为11,但实际上针对我们的需求,geohash长度为9的时候已经足够满足我们的需求(geohash长度为9大约代表了5*4米的格子)。

2.4 效果

此优化效果结果未做记录,不过经纬度geohash编码占据了term数量的25%,而我们又将geohash长度从11减少到9(降低18%),相当于整个term数量降低了25%*18%=4.5%。

3 只索引不存储

上面两种方法本质上通过减少term数量来减少索引文件大小,下面的方法走的是另一种方式。

从lucene查出一堆docid之后,需要通过docid找出相应的document,并找出里面一些需要的字段,例如id,人均消费等等,然后返回给客户端。但实际上我们只需要获取id,通过这些id再去请求DB/Cache获取额外的字段。

因此优化方法是只存储id等必须的字段,对于大部分字段我们只索引而不存储,通过这种方法,索引压缩文件降低了10%左右。

4 小结

本文基于lucene的一些基础原理以及自身业务,对索引文件大小进行了优化,使得索引文件大小下降了一半多。

此文作为学习笔记记录,感谢原文作者https://www.cnblogs.com/LBSer/p/4068864.html

转载于:https://www.cnblogs.com/guoziyi/p/10155589.html

lucene索引文件大小优化小结相关推荐

  1. mysql数值比中文检索快_MySQL 千万 级数据量根据(索引)优化 查询 速度

    一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...

  2. Lucene使用与优化(转)

    原文链接:http://blog.csdn.net/hongfu_/article/details/1933346 本文所使用的Lucene版本较低,年代久远,许多API可能已经变了. 1 lucen ...

  3. 影响Lucene索引速度原因以及提高索引速度技巧

    在网上看了一篇外文文章,里面介绍了提高Lucene索引速度的技巧,分享给大家. 先来看下影响索引的主要因素: MaxMergeDocs 该参数决定写入内存索引文档个数,到达该数目后就把该内存索引写入硬 ...

  4. Luke 5—— 可视化 Lucene 索引查看工具,可以查看ES的索引

    Luke 5 发布,可视化 Lucene 索引查看工具  oschina 发布于2015年08月31日  这是一个主要版本,该版本支持 Lucene 5.2.0. 它支持 elasticsearch ...

  5. HBase在淘宝的应用和优化小结

    本文来自于NoSQLFan联合作者@koven2049,他在淘宝从事Hadoop及HBase相关的应用和优化.对Hadoop.HBase都有深入的了解,本文就是其在工作中对HBase的应用优化小结,分 ...

  6. lucene索引word/pdf/html/txt文件及检索(搜索引擎)

    2009-07-02 15:31 因为lucene索引的时候是将String型的信息建立索引的,所以这里必须是将word/pdf/html等文件的内容转化问字符型. lucene的jar包自己去下载. ...

  7. mysql字段简索引_MySQL优化看这一篇就够了

    本文概要 概述 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 ...

  8. lucene索引_在崩溃或断电后测试Lucene的索引耐久性

    lucene索引 Lucene有用的事务功能之一是索引持久性 ,它可以确保一旦成功调用IndexWriter.commit ,即使操作系统或JVM崩溃或断电,或者您杀死-KILL JVM进程,重启后索 ...

  9. Mysql—索引③:优化篇(不仅仅是索引)

    回顾数据库服务器优化的过程 关于数据库调优的知识点非常分散.不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同. 虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优 ...

最新文章

  1. 转:保留小数点后四位,不足自动补0
  2. oracle union详解,Oracle中的union和join
  3. boost::hana::repeat用法的测试程序
  4. 【渗透过程】嘉缘网站 --测试
  5. 利用 Azure Functions 实现无服务器体系结构
  6. CSS基本知识之盒子模型
  7. vmware给linux虚拟机添加新的分区
  8. 交通分配四阶段法(一)
  9. 站桩功(初稿)王芗斋 著
  10. memcached面试专题
  11. 2023秋招大厂经典面试题及答案整理归纳(101-120)校招必看
  12. 人工智能 python 考证_写人作文
  13. 欧几里德算法(Euclidean algorithm)
  14. 区块链学习6:Mist合约部署与删除
  15. screen 使用命令
  16. 华为matebook鸿蒙,16寸专业大屏+满血Zen3!华为MateBook 16评测:鸿蒙加持 平板变身新外设...
  17. 【论文笔记】组件化雷达仿真软件设计与实现
  18. mysql外键设置不成功_MySQL数据库建立外键失败的原因总结
  19. Spark 读取mysql表统计
  20. python涨跌柱表行业市盈率

热门文章

  1. 安卓系统底层C语言算法之测试参数是几个long型的算法
  2. InnoDB行格式(compact,redundant)对照
  3. CentOS6.3.x86_64安装Trac
  4. Resources about Rx(Reactive Extensions)
  5. Helloj2ee WPF书评系列——缘起
  6. 使用群集保障SQL Server 2005的高可用性(2)
  7. 赛灵思FPGA中的主要时钟资源介绍
  8. 通信系统中对眼图的理解(二)
  9. php is_null 判断,PHP判断null,别再=了,你真控制不住
  10. @InsertProvider 实现批量插入数据