啥?你不知道Lucene,这份高级学习文档你值得拥有

news2024/11/19 8:22:01

最近在项目中用到了solr,查阅资料知道solr是基于Lucene实现了。本着刨根问底的精神,来研究一下Lucene

啥是Lucene?

Lucene是apache下的一个开源的全文本搜索引擎包。他为开发人员提供了一个简单工具包,以方便在目标系统中实现全文本搜索的功能

为啥要用Lucene?

有人可能要说了,不就是搜索吗,我直接用模糊查询在数据库查询它不香吗?
其实在数据量比较小的时候用sql实现搜索功能也无大碍,但是当数据量很大的时候数据库的压力就会非常大,而且模糊查询无法使用索引,所以必须全表查询,具体的缺点如下

SQL只能对数据库表进行搜索,不能直接针对硬盘上的文件进行搜索
SQL没有相关度排名
使用模糊查询的时候是对全表的遍历,效率低下
当数据库不在本地的时候,查询非常慢

所以很多的项目中实现搜索功能都是使用第三方的搜索工具,比如solr等。Lucene并不是搜索服务器,它不能单独的运行,它只是一个工具包,为用户提供一系列的api去调用。而很多的第三方的搜索工具就是封装扩展了Lucene而实现的,所以学习Lucene还是很有必要滴。前不久托朋友搞到了一份阿里架构师耗时一年整理的《Lucene高级学习文档》,在这里分享给大家

内容结构分为13个部分。

目录如下:

一、搜索技术理论基础

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

  • 为什么要学习Lucene
  • 数据查询方法
  • 全文检索技术应用场景

     

二、Lucene介绍

计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

  • 什么是全文检索
  • 什么是Lucene
  • Lucene官网

     

三、Lucene全文检索的流程

  • 索引和搜索流程图
  • 索引流程
  • 搜索流程

     

四、Lucene入门

  • Lucene准备
  • 开发环境
  • 创建Java工程
  • 索引流程
  • 使用Luke查看索引
  • 搜索流程

     

五、Field域类型

Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。

  • Field属性
  • Field常用类型
  • Field修改

     

六、索引维护

管理人员通过电商系统更改图书信息,这时更新的是关系数据库,如果使用lucene搜索图书信息,需要在数据库表book信息变化时及时更新lucene索引库。

  • 需求
  • 添加索引
  • 修改索引
  • 删除索引

     

七、分词器

在对Document中的内容进行索引之前,需要使用分词器进行分词 ,分词的目的是为了搜索。分词的主要过程就是先分词后过滤。

  • 分词理解
  • Analyzer使用时机
  • Lucene原生分词器
  • 第三方中文分词器

     

八、Lucene高级搜索

QueryParser支持默认搜索域,第-个参数为默认搜索域.如果在执行parse方法的时候,查询语法中包含域名则从指定的这个域名中搜索,如果只有查询的关键字,则从默认搜索域中搜索结果.

  • 文本搜索
  • 數值范围搜索
  • 組合搜索

     

九、搜索案例

  • 引入依赖
  • 项目加入页面和资源
  • 创建包和启动类
  • 配置文件
    业务代码

     

十、Lucene底层储存结构(高级)

  • 详细理解lucene存储结构
  • 索引库物理文件
  • 索引库文件扩展名对照表
  • 词典的构建

     

十一、Lucene优化(高级)

  1. confifig.setMaxBufffferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。(数值越大索引速度越快, 但是会消耗更多的内存

  2. indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段(数值越大索引速度越快, 搜索速度越慢; 值越小索引速度越慢, 搜索速度越快

  • 解决大量磁盘IO
  • 选择合适的分词器
  • 选择合适的位置存放索引库
  • 搜索api的选择

     

十二、Lucene相关度排序(高级)

Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。

十三、Lucene使用注意事项(高级)

  • 关键词区分大小写 OR AND TO等关键词是区分大小写的,lucene只认大写的,小写的当做普通单词。
  • 读写互斥性 同一时刻只能有一个对索引的写操作,在写的同时可以进行搜索
  • 文件锁 在写索引的过程中强行退出将在tmp目录留下一个lock文件,使以后的写操作无法进行,可以将其手工删除
  • 时间格式 lucene只支持一种时间格式yyMMddHHmmss,所以你传一个yy-MM-dd HH:mm:ss的时间给lucene它是不会当作时间来处理的
  • 设置boost 有些时候在搜索时某个字段的权重需要大一些,例如你可能认为标题中出现关键词的文章比正文中出现关键词的文章更有价值,你可以把标题的boost设置的更大,那么搜索结果会优先显示标题中出现关键词的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/11175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA基础——【笔记】14.集合

集合的框架体系: List等接口的实现子类有很多,仅列出常用的。 数组的不足(集合需求的出现): 集合特点: 一、Collection接口方法 1、Collection常用方法及其用法: (Collection为接口&#xff0…

C语言:二维数组的传递

目录 一、从本质了解二维数组 二、访问二维数组的方式 1、指向元素的指针 2、指向每一行的指针(指针数组) 3、指向整个数组的指针(数组指针) 三、3种二维数组的形参声明方式 1、数组法 2、数组指针法 3、指针法 在实践工程项目中&…

【数据结构笔记5】-哈夫曼树

哈夫曼树 结点的权:有某种显示含义的数值(如:表示结点的重要性等) 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该节点上权值的乘积。 数的带权路径长度:树种所有…

人工智能如何赋能智能安防落地?

作为当下最热门的技术,人工智能基本覆盖了所有的行业,也开始成为了安防行业的“大金矿”。 人工智能赋能安防行业的确是好事,但技术同质化、产品同质化等问题开始凸显出来,并显得越发严重。人工智能将以怎样的新姿态赋能智能安防落…

广东长荣科技有限公司-Java笔试题

Java工程师笔试题目(限30分钟完成) 一、请参考图片回答以下问题。 二、如何理解面向对象编程? 三、String s new String("Hello");s s " world!";这两行代码执行后,内存是如何变化的? 四、…

ASEMI代理力特二极管LSIC2SD120A05,肖特基LSIC2SD120A05

编辑-Z 力特碳化硅肖特基二极管LSIC2SD120A05参数: 型号:LSIC2SD120A05 重复峰值反向电压(VRRM):1200V 连续正向电流(IF):5A 非重复正向浪涌电流(IFSM)&…

Java#7(this关键字和构造方法)

目录 一.就近原则和this关键字 二.构造方法 1.构造方法的格式: 2.构造方法的特点: 有参构造和无参构造​编辑 三.标准的Javabean类 一.就近原则和this关键字 func里的age离System.out.println(age);比较近,所以输出的是10;这就是就近原则,但如果我想使用的是成员变量age前…

OceanBase 首席科学家阳振坤博士入选2022 年度“CCF王选奖”

11 月 14 日,2022 年度“CCF王选奖” 评选结果公布,蚂蚁集团副总裁、 OceanBase 首席科学家阳振坤博士 入选。 “CCF王选奖” 由中国计算机学会(简称 CCF)设立于 2005 年,以我国著名计算机科学家王选先生命名&#…

高精度定时器学习(通过官方手册学习)

高精度定时器学习功能描述一般说明HRTIM引脚和内部信号时钟Timer A..E timing units翻转事件功能描述 一般说明 HRTIM可以划分为几个模块: •主定时器 •计时单元(定时器A至定时器E) •输出级 •突发模式控制器 •所有定时器共享的外部事件…

Android核心技术—内核(Linux) 的IO栈

简述 Linux的IO路径可能是Linux系统中最纷繁复杂的模块了,而它又是如此的重要,直接决定了系统的性能。 接下来我们来看一张熟悉的老图: 由图可见,从系统调用的接口再往下,Linux下的IO栈致大致有几个层次&#xff1a…

【Spring】——3、自定义TypeFilter指定@ComponentScan注解的过滤规则

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

Java中的IO流

Java中的IO流 Java中的4大IO抽象类 InputStream/OutputStream 为字节输入输出流 Reader/Writer 为字符输入输出流 InputStream OutputStream Reader Writer Java中流的概念细分 二进制文件(图片、影音)用字节流 文本信息用字符流 IO流的体系 练手案例…

HTML入门

目录1 HTML快速入门1.1 HTML 的介绍1.1.1 HTML 的组成标签属性1.2 入门案例1.2.1 案例效果1.2.2 实现步骤1.3 总结2 HTML 基本语法2.1 HTML 的注释2.2 HTML 标签2.3 HTML 的属性2.4 HTML 的特殊字符3 HTML 案例 新闻文本3.1 案例效果3.2 案例分析3.2.1 div 样式布局3.2.2 文本标…

软件测试面试真题 | Selenium 的工作原理是什么?

搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核 Selenium 通常被我们用做测试web的自动化测试工具,其实 Selenium 不仅仅是个API,它是一组工具集合,它是由三大组件组成 WebDriver: 可以模拟真正的用户去操作浏览器页面&am…

机械转码日记【24】继承

目录 前言 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 4.1构造函数 5.设计一个不能被继承的类 6.继承与…

瑞吉外卖(三) 分类管理

瑞吉外卖 分类管理瑞吉外卖 分类管理 需求分析自动填充 代码思想ThreadLocal 的 引入瑞吉外卖 分类管理 需求分析 对于当前的多个Model,存在了多个相同的字段 比如说:更新时间,创建时间, 更新人等 这些重复的业务可以通过统一的接…

已有项目eclipse开发配置步骤

已有项目eclipse开发配置步骤 前提:jdk8安装、tomcat8安装 1、eclipse打开已有项目 File->import->Existing Projects into Workspace 说明:我这里已经打开项目了 2、配置Properties 项目根目录右击->点击Properties Java Build Path -&…

【僵尸进程和文件系统调用】

目录虚拟空间物理空间僵尸进程僵尸进程产生僵尸进程的解决孤儿进程文件系统调用虚拟空间物理空间 内存与磁盘的运行速度1:20 x86 32位 4G–> 物理内存:寻址能力4G 4G供内核1G,用户态的3G, 虚拟空间4G,虚拟空间可以…

周阳老师JUC并发编程

1. 序章 1)JUC是什么? java.util.concurrent在并发编程中使用的工具包 对JUC知识的高阶内容讲解和实战增强 2)为什么学习并用好多线程极其重要? 硬件方面: 摩尔定律: 它是由英特尔创始人之一Gordon Moore(戈登摩尔…

Linux 下编译实现C/Fortran调用动态库

目录 FORTRAN语言 生成动态库Demo 查看动态库中的函数 Fortran语言 FORTRAN语言是Formula Translation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。 FORTRAN语言是…