《从Lucene到Elasticsearch:全文检索实战》已出版!_从lucene到elasticsearch全文检索实战 pdf-程序员宅基地

技术标签: Elasticsearch  elasticsearch  lucene  新闻搜索  Elasticsearch专栏  mysql  Lucene  es  

#一、前言

决定在CSDN写博客的原因是想把自己解决过的问题、踩过的坑、总结出来的经验记录下来,作为编程之路的“笔记本”,同时也能给遇到同样问题的人提供参考、节省时间,写书的初衷也一样。

#二、缘起

说一下写书的前因后果。中国科学院大学雁栖湖校区是很重要的一年,师资团队无可挑剔,每次上课去的稍微晚一点,300人的大教室都没有座位。对于计算机学院而言,大数据、机器学习、信息检索(搜索引擎)、算法、人工智能是最火的几个领域,信息检索课是最受欢迎的几门课之一。最后的工程大作业是实现一个新闻搜索,图1是我最早完成的效果。

这里写图片描述

图1 基于Lucene的新闻搜索项目

后来,利用放暑假的时间,去找实习。也许是跟Elasticsearch有缘分,投的java实习生的岗位,做的是搜索的业务,也许我的简历上有Lucene这个小项目,Elasticsearch又是基于Lucene的,老大(中科大毕业的)给了我一份文档去学习Elasticsearch。这份文档是清华的一个学长做的Elasticsearch技术调研,其中很多基础性的东西都写在文档里了,有信息检索的理论、有Lucene基础,又有前辈总结的文档,上手Elasticsearch很快,业务中的大部分问题也都在短时间内得到了解决。当然,这期间也有遇到过很多问题,比如一开始对Elasticsearch中的一些概念不熟悉,理解起来比较困难,还有很多API不知道如何用,国内的相关文档也不太多,这期间我一直在Stack Overflow上和外国的大牛交流,不断的遇到问题、提问、解决问题、总结思考,如此反复,同时也把我解决过的问题贴到博客上面。就这样,博客积累的越来越多,对Elasticsearch、对搜索的体会也不断深入,同时公司里的老大、同事都给了我很多帮助和指导,进步也很快。

再后来,清华大学出版社的编辑通过博客联系到我,问我想不想写一本Elasticsearch的书,把技术分享出来。

#三、创作

写书的过程跟我想的完全不一样,一开始以为博客上有那么多内容,整理整理很快书就完成了,事实上写书和写代码完全是两回事。写代码,明白需求,编写代码,解决问题,任务就完成了,而写书是写怎么写代码,要让读者看明白,同时整个书是一个体系,要有组织有路线,写作的过程要兼顾整体与部分。经过反复的思考,反复的修改,从理论到基础,从基础到项目实战,前前后后将近一年的时间完成了初稿。就在准备付梓之时,Elasticsearch 5.X发布了,而且变化比较大,又花了2个月的时间基于Elasticsearch 5.4把所有的内容更新了一遍。直到17年10月份,终于完稿!

#四、特色

  1. 信息检索的基本术语、核心算法。
  2. Lucene基础。
  3. 文件搜索项目。
  4. Elasticsearch基础。
  5. 新闻搜索项目。
  6. Elasticsearch和Hadoop的结合。

#五、阅读指南

关于本书的阅读指南说明如下:

##第1章
第一章主要介绍信息检索的基本定义、术语、分词算法、倒排索引、布尔检索模型、向量空间模型、BM25概率检索模型。这一章的目的是为了让读者对信息检索有一个基本的认识,明白搜索是这么回事。关于检索模型,不论Lucene还是ELasticsearch,相关性评分是搜索要解决的问题,理解检索模型非常重要,我的建议是自己动手推导数学公式,从数学上理解算法,到后面再用Lucene或Elasticsearch就能游刃有余。

##第2章
第二章主要介绍怎么用Lucene,学习内容主要包括分词的实现、索引的构建、查询的用法以及关键字高亮。

##第3章

用Lucene仿照百度文库实现一个文件检索项目。如图2所示。

##第4章

Lucene和Elasticsearch的关系,Elasticsearch的诞生过程、流行度分析、架构、核心概念、和其它数据库的对比、安装与启动、中文分词器配置、常用插件配置。

##第5章

第5章主要有三块内容:索引管理、文档管理和映射详解。索引管理包括索引的增、删、改、查、开、关、复制、收缩、别名,文档管理包括文档的增、删、更新、获取、批量操作、版本机制和路由机制,映射详解主要包括映射的分类、动态映射和静态映射、字段类型、元字段、映射参数和映射模板。其中映射配置和使用是重点,遇到过多次因为日期类型的mapping设置有误,上亿的数据导到Elasticsearch之后需要翻工修改。每一个需要使用Elasticsearch的开发者,在动手之前,把mapping中的所有字段、原字段、参数等配置信息过一遍是最基本的要求。

##第6章

第6章主要介绍搜索机制、全文级别的查询、词项级别的查询、复合查询、嵌套查询、位置查询、特殊查询、搜索高亮的实现以及性能分析、搜索排序和评分的相关分析。

##第7章

第7章主要介绍指标聚合和桶聚合。指标聚合可以实现关系型数据库中的统计功能,比如常用的求和、最大/小值、平均数等,桶聚合可以实现关系型数据库中的分组功能,每个的功能都通过具体例子进行讲解。

##第8章

第8章介绍如何在Java项目中通过Java客户端做二次开发。Elasticsearch提供了多种客户端,包括Java、Javascript、Python、.NET、PHP、Ruby等常用语言,考虑到Lucene是纯java编写、基于java的项目比较多,这一章重点介绍如何使用java客户端基于Elasticsearch做二次开发。

##第9章

第9章介绍集群的规划、分片的规划、分布式集群的配置、集群健康的监控与查看以及常用的API。

##第10章

第10章讲解基于Elasticsearch整合Mysql实现新闻搜索项目,包括数据导入、 前端搜索框和搜索结果页、关键字高亮、搜索分页等关键步骤的实现。如图3和图4所示。

##第11章

第11章介绍ES-Hadoop,ES-Hadoop是连通分布式搜索引擎Elasticsearch和Hadoop大数据生态系统的桥梁。

这里写图片描述

图2 基于Lucene的文件检索项目

这里写图片描述

图3 基于Elasticsearch的新闻搜索项目(搜索框)

这里写图片描述

图4 基于Elasticsearch的新闻搜索项目(搜索结果页)

#六、购书
这里写图片描述
天猫 京东

#七、勘误

囿于个人知识、能力、经验有限,欢迎读者对本书中的任何不足和疏漏之处进行批评指正,任何意见、建议都可以在本帖下回复。

#八、总结

我希望阅读本书的读者:

对于数学理论,最好是能静下心,拿出纸笔,从数学公式上去推导;

对于Lucene基础,所有的代码都应该写一遍,例子都是环环相扣逐步深入的;

对于文件搜索项目,能够找一些格式不一样的文档,从0开始实现一个小的百度文库;

对于Elasticsearch,基本的安装、插件正确配置,所有的基础API都应亲自测一把;

对于新闻搜索项目,从0开始一步一步去实现一个小的百度新闻搜索;

对于ES-Hadoop,把Hadoop的安装配置好,例子运行起来。

这也是这本书所能给你的。

最后,图书的出版是技术路上的一个总结,希望本书能够帮助有需要的朋友。“三人行,必有我师”,我还会一如既往的努力,一如既往的和大家交流学习。

八、书评

如果您阅读过本书,请在豆瓣读书给出客观、中肯的建议。
豆瓣读书评论地址:
https://book.douban.com/subject/30218691/

这里写图片描述

关注我

搜索: 搜索算法

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/napoay/article/details/78698226

智能推荐

Android Studio 超详细 安装SDK 教程_andriod studio 需要安装什么-程序员宅基地

文章浏览阅读3.5w次,点赞32次,收藏121次。Android SDK Manager 所需要下载的文件刚开始接触Android应用开发,工欲善其事,必先利其器。1.首先这三个是必须安装的。2.选择你要下载的SDK版本,这里以Android10为示例。选完之后点install 10 packges3.等待下载就行了。..._andriod studio 需要安装什么

CCS7.3 安装使用教程_如何把ccs文件转为keil-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏9次。CCS7.3 安装使用教程•Code Composer Studio IDE,是TI的集成开发环境。 Code Composer Studio Desktop IDE for all TI microcontrollers, processors, and wireless connectivity platforms。TI所有的产品都可以用ccs进行开发。 1.首先到TI官网进行下载最新本_如何把ccs文件转为keil

Android 各类优秀依赖库 等各位砖友来搬_android好用的用于检查输入的依赖-程序员宅基地

文章浏览阅读2.8k次,点赞8次,收藏23次。有很多类型的开源库 希望能够帮助到您抽屉菜单MaterialDrawer ★7337 - 安卓抽屉效果实现方案 Side-Menu.Android ★3865 - 创意边侧菜单 FlowingDrawer ★1744 - 向右滑动流动抽屉效果 SlidingRootNav ★1338 - 仿DrawerLayout的ViewGroup FantasySlide ★1049..._android好用的用于检查输入的依赖

Python求多个list的交集、并集、差(补)集的方法_python 多个list求并集-程序员宅基地

文章浏览阅读1.5w次,点赞9次,收藏51次。文章目录摘要1.求多个list的交集2.求多个list的并集3.求多个list的差(补)集 - 即获取特定1个list中有,其他list都没有的元素4.求在多个list中只出现过1次的元素组成的集合摘要本文主要介绍在Python下求两个list的交集、并集、差(补)集、对称差集的方法,如何在Python中对变量名进行动态地定义,介绍以下两种常用的情况:1.定义如a1=1,a2=2,a3=3这..._python 多个list求并集

python动图存储为视频_matplotlib动态图和视频保存-程序员宅基地

文章浏览阅读1k次。FuncAnimation类class matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None,fargs=None, save_count=None, **kwargs)参数fig : matplotlib.figure.Figure对象,可以理解为画布func : 函数(callable),每一帧被调用..._把刷新的fig保存为视频

JAVA中ResourceBundle使用详解-程序员宅基地

文章浏览阅读9.1w次,点赞56次,收藏227次。JAVA中ResourceBundle使用详解这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBund

随便推点

基于javaweb的水果蔬菜商城批发系统(java+ssm+jsp+jquery+mysql)_蔬菜批发 系统-程序员宅基地

文章浏览阅读597次。基于javaweb的水果蔬菜商城批发系统(java+ssm+jsp+jquery+mysql)运行环境Java≥8、MySQL≥5.7、Tomcat≥8开发工具eclipse/idea/myeclipse/sts等均可配置运行适用课程设计,大作业,毕业设计,项目练习,学习演示等功能说明_蔬菜批发 系统

.net core 控制台程序发布并运行在 centos(便携应用方式)_控制台net7 怎么发布到centos-程序员宅基地

文章浏览阅读9.6k次。编写一个console app并发布到centos1.新建一个.net core控制台程序2. 直接发布,选择目标运行为linux3.将Release\netcoreapp2.0目录下的pulish目录复制到centos中4.修改publish下的执行文件为可执行(文件属性中可修改)5.在命令行窗口中可执行如果执行报错:Failed to load , error: libunwind.so.8:..._控制台net7 怎么发布到centos

基于SSM 的图书馆管理系统_图书管理ssm-程序员宅基地

文章浏览阅读1.5k次。基于SSM 的图书馆管理系统拥有两个角色,分别为管理员和学生。具体功能如下:**管理员**:查看、添加图书,查看添加学生,借还管理,修改密码等**学生**:查加检索图书、查看个人信息、查看个人借阅情况、修改密码_图书管理ssm

USB转串口那些事儿—USB转串口工作原理及应用-程序员宅基地

文章浏览阅读2.9w次,点赞37次,收藏189次。USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。USB虚拟串口应用特点:USB应用广泛,支持热插拔,传输速度快。仿真标准串口,用于升级原串口设备,或通过USB增加额外串口。串口应用程序完全兼容,无需修改。支持各类操作系统,如:Windows/Linux/Android/macOS。二、工作原理USB主机检测到USB转串口设备插入后,首先会对设备复..._usb转串口

第2章:指令系统的设计_等长扩展码什么意思啊-程序员宅基地

文章浏览阅读2.7k次。指令系统是计算机系统结构的主要内容,是软硬件交界面的主要部分。区别不同指令系统结构的主要因素:CPU中用来存储操作数的数据单元类型对于不同类型的结构,操作数的位置、个数以及操作数的给出方式(显式或隐式)也会不同用 指令字中的操作数字段 给出比如,直接给出操作数的值使用事先约定好的单元堆栈型结构中,操作数隐式给出,栈顶两个元素被弹出参与运算,计算结果被压入栈中累加器型结构中,累加器内的操作数是隐式的,另一个操作数是显式给出的比如:add X 其中累加器中的数据是隐式的,X是显式给出的。在通用寄存器型结构中,_等长扩展码什么意思啊

cocos2d 游戏引擎发展历史_cocos最早起源-程序员宅基地

文章浏览阅读2.9k次。这个帖子纯属为了梳理一下近日以来凌乱是思维,打算搞cocos很久了,可是由于工作原因一直都是自己摸索,断断续续,今天难得有空,把cocos发展主线梳理一下,有了脉络,学习起来就不会乱。cocos由来(百度百科)Cocos2D的诞生2005年,Ricardo和朋友萌生了用Python语言 “一星期编写一个游戏”的想法。在2005~2007年间,他们设计了许多种这样的游戏。_cocos最早起源