Lucene解析 - 基本概念
摘要: 前言 Apache Lucene是一个开源的高性能、可扩展的信息检索引擎,提供了强大的数据检索能力。Lucene已经发展了很多年,其功能越来越强大,架构也越来越精细。它目前不仅仅能支持全文索引,也能够提供多种其他类型的索引方式,来满足不同类型的查询需求。
前言
- Scalable, High-Performance Indexing
- Powerful, Accurate and Efficient Search Algorithms
基本概念
- DocId实际上并不在Index内唯一,而是Segment内唯一,Lucene这么做主要是为了做写入和压缩优化。那既然在Segment内才唯一,又是怎么做到在Index级别来唯一标识一个Doc呢?方案很简单,Segment之间是有顺序的,举个简单的例子,一个Index内有两个Segment,每个Segment内分别有100个Doc,在Segment内DocId都是0-100,转换到Index级的DocId,需要将第二个Segment的DocId范围转换为100-200。
- DocId在Segment内唯一,取值从0开始递增。但不代表DocId取值一定是连续的,如果有Doc被删除,那可能会存在空洞。
- 一个文档对应的DocId可能会发生变化,主要是发生在Segment合并时。
索引类型
- stored: 代表是否需要保存该字段,如果为false,则lucene不会保存这个字段的值,而搜索结果中返回的文档只会包含保存了的字段。
- tokenized: 代表是否做分词,在lucene中只有TextField这一个字段需要做分词。
- termVector: 这篇文章很好的解释了term vector的概念,简单来说,term vector保存了一个文档内所有的term的相关信息,包括Term值、出现次数(frequencies)以及位置(positions)等,是一个per-document inverted index,提供了根据docid来查找该文档内所有term信息的能力。对于长度较小的字段不建议开启term verctor,因为只需要重新做一遍分词即可拿到term信息,而针对长度较长或者分词代价较大的字段,则建议开启term vector。Term vector的用途主要有两个,一是关键词高亮,二是做文档间的相似度匹配(more-like-this)。
- omitNorms: Norms是normalization的缩写,lucene允许每个文档的每个字段都存储一个normalization factor,是和搜索时的相关性计算有关的一个系数。Norms的存储只占一个字节,但是每个文档的每个字段都会独立存储一份,且Norms数据会全部加载到内存。所以若开启了Norms,会消耗额外的存储空间和内存。但若关闭了Norms,则无法做index-time boosting(elasticsearch官方建议使用query-time boosting来替代)以及length normalization。
- indexOptions: Lucene提供倒排索引的5种可选参数(NONE、DOCS、DOCS_AND_FREQS、DOCS_AND_FREQS_AND_POSITIONS、DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS),用于选择该字段是否需要被索引,以及索引哪些内容。
- docValuesType: DocValue是Lucene 4.0引入的一个正向索引(docid到field的一个列存),大大优化了sorting、faceting或aggregation的效率。DocValues是一个强schema的存储结构,开启DocValues的字段必须拥有严格一致的类型,目前Lucene只提供NUMERIC、BINARY、SORTED、SORTED_NUMERIC和SORTED_SET五种类型。
- dimension:Lucene支持多维数据的索引,采取特殊的索引来优化对多维数据的查询,这类数据最典型的应用场景是地理位置索引,一般经纬度数据会采取这个索引方式。
Elasticsearch数据类型
总结
原文链接
干货好文,请关注扫描以下二维码:
Lucene解析 - 基本概念相关推荐
- 标准查询分析器:Solr的默认查询解析器也称为“Lucene”解析器。
标准查询分析器:Solr的默认查询解析器也称为"Lucene"解析器. 标准查询解析器的主要优点是,它支持一种健壮且相当直观的语法,允许您创建各种结构化查询.最大的缺点是,与设计为 ...
- Android:详细解析RSSI概念
每篇一格言: 有非凡志向,才有非凡成就. --Bill Gates 目录 1.RSSI定义 2.RSSI 单位 贝尔 分贝 DBm(分贝毫瓦) 为什么用DBm 3.RSSI 阈值 总结 1.RSSI定 ...
- 全面解析虚拟内存概念
一个系统中的进程是与其他进程共享CPU和主存资源的.随着对CPU需求的增长,进程以某种合理的平滑的方式慢了下来.但是如果太多的进程需要太多的内存,那么它们中的一些就根本无法运行.当一个程序中没有空间可 ...
- 《软件架构设计.第二版解析软件架构概念》阅读笔记——到底什么是软件架构?...
2019独角兽企业重金招聘Python工程师标准>>> 我的经历及对软件架构的理解 我个人从事软件开发8年,大大小小软件做过不计其数,做过企业应用的架构设计,也做过全新的互联网在线S ...
- lucene全文检索的概念
1.数据分类 结构化数据:有固定类型或者有固定长度的数据 例如:数据库中的数据(oracle,mysql等),windows中的数据(元数据) 结构化数据的搜索方法: 数据库中数据通过sql语句可以搜 ...
- PLSQL_动态语句的解析(概念)
2014-06-02 Created By BaoXinjian 1. 最简单例子 (1).SQL 1 DECLARE 3 l_sql_text VARCHAR (1000); 5 TYPE c_ty ...
- 【转载保存】lucene优秀文章整理
Lucene解析 - 基本概念: https://www.jianshu.com/p/fbb171e73721?from=timeline&isappinstalled=0 L ...
- Lucene的一些基本使用方法和概念 (JAVA)
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目.其功能非常的强大,但api其实很简单的,它最主要就是做两件事:建立索引和进行搜索. 1. 建立索引时最重要的几个术语 * Do ...
- Lucene原理分析
ElasticSearch是基于Lucene的搜索服务器,lucene承载了elasticSearch的核心算法和设计系想,所以要想彻底学透ElasticSearch需要从学习Lucene开始. 概念 ...
最新文章
- LSTM模型与前向反向传播算法
- 一文盘点数据行业的动态演变
- php 168任意代码执行漏洞之php的Complex (curly) syntax
- Laravel经常使用的语法总结
- (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
- 1、mybatis是什么?为什么要用mybatis?
- 文本框的值默认显示文本域上_13.4.4 键盘与文本事件
- ubuntu 安装chrome浏览器
- 用户与系统(unix)
- ML for trading -cs7646-02
- dem数据(dem数据格式)
- 扩展切比雪夫多项式(混沌映射, Chebyshev chaotic map)
- 计算机与现代社会英语作文,急求英文翻译 随着现代社会的发展,人工智能已经逐步进入了我们的生活。人工智能带给了我们生活无穷的便...
- 2023广东海洋大学计算机考研信息汇总
- VS创建 Win32 应用程序(实现窗口的创建)
- 干货 | Elasticsearch 检索类型选型指南
- flutter-Routers基础介绍
- 极具挑战性的工作:升级模式库从CQ2002到CQ7
- 网站制作笔记-bootstrap可视化布局,表单生成工具,快速制作网页原型
- 鱼眼图像(fisheye image)通过几何变换形成透视图(a perspective view)[存疑]
热门文章
- 泊松分布的分布函数_《可靠性设计》——常用的概率分布
- 用python将word文档导入数据库_python读取word文档,插入mysql数据库的示例代码
- c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...
- java 浏览器 爬虫_java 网络编程-爬虫+模拟浏览器
- mysql 虚拟列索引_使用MySQL 5.7虚拟列提高查询效率
- java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
- 灯效控制器和rgb控制器_更具个性的RGB风扇,机箱里的魔术师,九州风神MF120GT开箱...
- suse linux11 改ip,suse11如何修改hostname[Linux基础]
- AI超人赛车手狂虐人类登Nature封面!1000台PS4训练,「苏菲」极限超车独霸赛道...
- 25岁“天才少年”曹原再发一篇Nature!1个月时间内的第二篇!