浅谈使用ElasticSearch实现全文检索

IDEADATA-iDSP-Yeun   2016年5月15日

现如今,无论是互联网信息还是企业内部每天产生的信息,都在以指数级增长,对于企业内部,每天发生的大量数据,尤其是非结构化数据中,如何能快速查找到对企业内部有用的信息,成为每个公司开始关注的重点。

前段时间,笔者就接到类似的需求,某大型保险企业,希望能够将每天发生在企业内部的非结构化数据进行存储与检索,方便内部人员及时了解相关信息,提高部门间信息共享,提升工作效率。

这个其实是一个很典型的内容管理的相关需求,具体的技术选型和架构此处就不详细展开一一去讲,本文主要就如何使用ElasticSearch进行全文检索,满足用户需求来浅谈一二。

一、ElasticSearch是什么?

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便,零配置和完全免费。

我们先说说ES的基本概念。

1、索引(Index)

ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。

索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

2、类型(Type)

类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。

例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

3、文档(Document)

文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。

文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。

4、映射(Mapping)

ES中,所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉,以及哪些文本需要进行额外处理等。

另外,ES还提供了额外功能,例如将域中的内容按需排序。事实上,ES也能自动根据其值确定域的类型。

5、集群(Cluster)

ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。

多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。

集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属一个集群。

如果不考虑冗余能力等特性,仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。

6、节点(Node)

运行了单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据、参与集群索引及搜索操作。

类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机Marvel字符名称。

用户可以按需要自定义任何希望使用的名称,但出于管理的目的,此名称应该尽可能有较好的识别性。

节点通过为其配置的ES集群名称确定其所要加入的集群。

7、分片(Shard)和副本(Replica)

ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。

每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。

ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。

ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。

OK,上面把ES相关的基本概念及原理大致说明了下,那么ES到底是怎么实现全文检索的呢?

Elasticsearch实现全文检索,首先要确定分词器,ES默认有很多分词器,可参考官方文档。了解分词器主要是怎么实现的。

一般中文分词器使用第三方的ik分词器、mmsegf分词器和paoding分词器,最初可能构建于lucene,后来移植于ES。目前我们在最新版的ES中,使用的是IK分词。

安装ik分词器到elasticsearch很简单,它有个插件目录analysis-ik,和一个配置目录ik, 分别拷贝到plugins和conf目录就可以了。

当你有大量的文本数据时,ES均会将其进行分词并将这些词语保存在索引中,当输入关键词进行查询时,索引就会起到作用,查找对应的相同的查询词,从而实现全文检索。当然这个过程是很吃内存的哦。

好了,以上大概介绍了下ES的基本原理,是不是已经对其非常感兴趣了?可以上官方网站下载并在自己机器上尝试安装与使用,之后还会根据项目中的实战经验进行进一步总结与梳理,届时分享给大家。

es全文检索论文_浅谈使用ElasticSearch实现全文检索相关推荐

  1. 《计算机辅助教学及应用实践研究》,《论文_浅谈计算机辅助教学(定稿)》

    <论文_浅谈计算机辅助教学(定稿)> (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 摘要:计算机辅助教学中要用到多媒体课件 ...

  2. python程序设计论文_浅谈初中Python程序设计教学的实践与体会

    浅谈初中 P y t h o n 程序设计教学的实践与体会 冯科宇 ( 佛山市顺德区伍蒋惠芳初级中学 广东 佛山 5 2 8 3 2 5 ) [ 摘要 ] 面向中小学生教学开设的计算机高级语有很多 , ...

  3. 动力环境监控系统论文_浅谈动力环境监控系统技术标准

    动力环境监控系统技术标准规定了监控系统各因素指标.功能,对实现机房设备故障自动检测.无人化值守.降低维护保养成本的动环系统有重要的作用和意义.运用动环监控,能解决成本高.效率低.告警慢.信息落后能问题 ...

  4. python应用实例论文_浅谈Python在科学计算中的应用

    55 SYS PRACTICE 系统实践 有效的计算工具能为工作提高效率,Python 在实际工作与 科学调研中等运用的也越来越广泛,通过专家不断的研究与分 析,通过 Python 进行科学计算是再合 ...

  5. 论文《浅谈中国古代建筑艺术》

    论文<浅谈中国古代建筑艺术> 2010年06月06日 中国古代建筑是中华民族优秀文化传统的重要组成部分.在中国社会发展的每个时期的建筑风格,都与其时代特点和文化科学技术的革新与进步密切相关 ...

  6. python判断两个对象是否为相等使用的运算符是_Python入门_浅谈逻辑判断与运算符...

    这是关于Python的第6篇文章,主要介绍下逻辑判断与运算符. (一) 逻辑判断: 如果要实现一个复杂的功能程序,逻辑判断必不可少.逻辑判断的最基本标准:布尔类型. 布尔类型只有两个值:True和Fa ...

  7. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  8. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  9. opencv运动目标跟踪预测_浅谈多目标跟踪中的相机运动

    ©PaperWeekly 原创 · 作者|黄飘 学校|华中科技大学硕士生 研究方向|多目标跟踪 之前的文章中我介绍了 Kalman 滤波器,这个算法被广泛用于多目标跟踪任务中的行人运动模型.然而实际场 ...

最新文章

  1. C#.Net的常见面试试题 [转]
  2. PHP简单的字符串加密与加密代码
  3. python API docs
  4. SQL2000 好书 《SQL Server 2000数据库管理与开发技术大全》----求是科技 人民邮电出版社
  5. (一)MVC5干货篇,目录和路由
  6. spring连数据库的配置文件(applicationContext.xml)
  7. 2.1.5编码与调制(1)
  8. 诚毅学院的计算机专业,诚毅学院计算机专业JAVA题目
  9. 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)...
  10. 由矢量电子海图构建海底 TINDEM方法研究
  11. .NET反编译:使用NET.Reflector+Reflexil插件相结合实现对DLL文件的修改操作
  12. 尚硅谷李立超老师讲解web前端---笔记(持续更新)
  13. 《ShareX 》截图神器
  14. Target: x86_64-linux-gnu下实现gcc -m32
  15. 数据可视化~matplotlib阶梯图,直方图
  16. 论文阅读——(邬江兴院士) 网络空间内生安全综述 Cyberspace Endogenous Safety and Security
  17. 机器阅读理解(Neural Machine Reading Comprehension)综述,相关方法及未来趋势
  18. mariadb集群与nginx负载均衡配置--centos7版本
  19. Linux花开五洲,争奇斗艳
  20. 网络状态码 200 300 400 500

热门文章

  1. rename(Perl语言版本) 详解
  2. 竟然有这么多方法可以获得iphone5C的数据,FBI你高兴不?
  3. 【综述】推荐系统偏差问题 去偏最新研究进展(Bias and Debias in Recommender System)
  4. 字符串和二进制串相互转换(C++)
  5. Oracle19c安装教程及PLSQL配置常见错误解决办法
  6. 计蒜客-20 islands 炉石传说
  7. A 股指数成分数据 API 数据接口
  8. 【Python——链表】
  9. Ubuntu udev rules
  10. 单选框默认选中某个值