您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于Elasticsearch全文检索系统的实现
2019.06在当前互联网大数据的浪潮下袁搜索可以帮助用户从大量的繁杂的数据信息中准确地获取他们想要的信息袁所以大到百度尧Google等搜索引擎袁小到商业网站尧电商平台袁甚至企事业单位和政府的门户网站都带有搜索功能袁他们都是为了更方便更快速地搜索用户想要的数据信息遥可见袁搜索功能无处不在袁也必不可少袁但是一个网站搜索功能的好坏将直接影响到用户的体验和网站的口碑袁所以当前大多数商业网站早已不用传统的老旧的关系型数据库自带的搜索功能袁因为它查询范围有限尧查询速度慢袁而是采用了基于Lucene的使用Java开发的实时分布式搜索引擎Elasticsearch来实现实时搜索尧分词搜索的全文检索系统遥1关系型数据库的模糊查询及弊端1.1关系型数据库及模糊查询关系型数据库是指采用了关系模型来组织数据的仓库遥常用的关系型数据库如Oracle尧MSSQL尧MySQL等袁它们都自带模糊查询的功能袁通过SQL语句中的like语法实现通过关键字对数据的搜索功能遥某电商平台的商品数据表在MySQL数据库中的创建如下院createtable`good`(`id`varchar(32)notnullcomment'商品表主键',`title`varchar(64)default''comment'商品名称',`intro`varchar(256)default''comment'商品简介',`detail`textcomment'商品详情',primarykey(`id`),//创建商品表主键uniquekey(`title`),//创建title字段索引uniquekey(`intro`)//创建intro字段索引);根据索引设计原则及生效条件袁在上文的商品表good中袁最为适合建立索引的是id渊数据库主键冤尧title和intro袁由于detail长度过长袁不建议在该字段上建立索引遥上面的商品表good袁如果要根据关键词来查询商品信息袁模糊查询分为以下3种院渊1冤前模糊查询院select*fromgoodwheretitlelike'关键词%'orintrolike'关键词%'ordetaillike'关键词%'袁即查询title或intro或detail字段中以野关键词冶开头的商品信息袁title和intro字段的索引生效袁会执行索引查询袁detail字段全表扫描查询袁查询时间复杂度为2*Log(N)+O(N)遥渊2冤后模糊查询院select*fromgoodwheretitlelike'%关键词'orintrolike'%关键词'ordetaillike'%关键词'袁即查询title或intro或detail字段中以野关键词冶结尾的商品信息袁title和intro字段的索引失效袁会执行全表扫描袁detail字段全表扫描查询袁查询时间复杂度为3*O(N)遥渊3冤全模糊查询院select*fromgoodwheretitlelike'%关键词%'orintrolike'%关键词%'ordetaillike'%关键词%'袁即查询title或intro或detail字段中包含野关键词冶的商品信息袁title和intro字段的索引失效袁会执行全表扫描袁detail字段全表扫描查询袁查询时间复杂度为3*O(N)遥1.2关系型数据库模糊查询的弊端通过上面3种模糊查询方式不难发现袁如果为了提基于Elasticsearch全文检索系统的实现梁文楷(安顺职业技术学院,贵州安顺561000)摘要院说到搜索功能,首先会想到关系型数据库RDBMS的模糊查询功能,但是在当前互联网大数据的浪潮下,数据库的模糊查询在数据量非常大时(通常为百万或千万数据量),查询也会变得很慢,远远不能满足用户对搜索的实时需求,因此大部分商业网站尤其是电商平台,为了给用户带来更好的实时搜索体验,采用了Elasticsearch技术,以此来实现实时的、带分词功能的全文检索系统。关键词院SQL模糊查询;互联网;Elasticsearch搜索引擎;中文分词;全文检索收稿日期:2019-04-071162019.06高查询速度而给商品表good中的字段title和intro建立索引袁根据索引的设计原则及生效条件袁当根据关键词搜索商品信息时袁只有前模糊查询的title和intro字段索引生效袁detail字段全表扫描袁而后模糊查询和全模糊查询的索引不会生效袁查询字段全表执行全表扫描袁故查询速率也不会提高遥而且上述的3种模糊查询方式都不能先对搜索关键字进行分词再模糊查询袁这显然不能满足用户全文综合搜索的需求袁它们的缺点也很明显院渊1冤不能分词查询曰渊2冤查询速率会随着数据量的增大而减慢遥因而大型商业网站的搜索功能都不会使用这种方式来实现袁他们通常使用Elasticsearch技术来实现全文检索系统遥2Elasticsearch简介及商业应用Elasticsearch是一个基于Lucene的使用Java开发的实时分布式搜索引擎袁它提供了一个分布式多用户能力的全文搜索引擎袁基于RESTfulWeb接口遥并作为A鄄pache许可条款下的开放源码发布袁是当前流行的企业级搜索引擎遥Elasticsearch被设计用于云计算中袁能够达到实时搜索尧稳定尧可靠尧快速尧安装使用方便遥Elasticsearch搜索引擎在商业上的用途有院渊1冤Wikipedia使用Elasticsearch提供带有高亮片段的全文搜索遥渊2冤卫报使用了Elasticsearch将网络社交数据结合到访客日志中袁实时地给它的编辑们提供公众对于新文章的反馈遥渊3冤StackOverflow将地理位置查询融入全文检索中去袁并且使用more-like-this接口去查找相关的问题与答案遥渊4冤GitHub使用Elasticsearch对1300亿行代码进行查询遥3全文检索系统的需求分析在信息时代和小数据时代袁一般的网站的搜索功能是院当用户输入关键字进行数据检索时袁关系型数据库只能借助自身自带的模糊查询功能进行关键字的数据搜索袁然而这种查询方式的搜索范围有限袁而且搜索速度会伴随着数据量的增加而变慢袁达不到用户实时搜索的需求遥而在互联网大数据时代的背景下袁所设计的全文检索系统是院当用户输入关键字进行搜索时袁搜索系统首先会对关键字进行分词袁然后再进行搜索袁最后再根据数据信息的匹配度进行从高到底排序袁同时给搜索结果设置一个阀值袁低于阀值的搜索结果被过滤掉袁高于阀值的搜索结果被检索出来袁而且搜索结果要有关键字的分词的高亮效果袁而且整个搜索过程的耗时不宜过长遥4全文检索系统的设计与实现全文检索系统的基础数据是上文中的商品数据表good袁它是基于Elasticsearch技术袁使用Java结合Spring技术尧Maven技术尧MySQL数据库技术等袁采用B/S架构实现的袁其设计思路是采用互联网常用的实时搜索技术方案遥渊1冤设计搜索系统对应的MySQL数据库及商品数据表good渊参见上文的商品数据表冤袁主要用于存储商品的相关信息曰渊2冤搭建Elasticsearch服务并建立搜索引擎数据库es_database尧文档es_good_info尧类型和索引曰渊3冤实现数据同步服务并将MySQL中商品表good的基础数据转化为JSON数据格式存储于Elas鄄ticsearch的数据库es_database中曰渊4冤设置Elastic鄄search的分词算法尧搜索模板及字段权重尧最小匹配阀值等相关参数袁当用户输入关键字时系统调用Elastic鄄search搜索接口即可实现全文搜索遥4援1系统总体设计4援1援1搜索流程如图1所示遥4援1援2Elasticsearch搜索引擎Elasticsearch简称ES袁它不仅提供了分布式的全文检索引擎袁而且提供了海量文档的存储功能遥在Elas鄄ticsearch搜索引擎中袁有索引尧类型尧文档和文档ID等概念袁他们和关系型数据库的对应关系为袁索引图1浏览器(Client)关键字/条件搜素返回搜索结果B/S架构的全文检索系统MySQL返回搜索结果ES返回搜索结果搜索类型常规搜索如条件筛选等关键字全文检索如MySQL中有数据变化MySQL数据库实时同步变化数据至ES数据仓库ElasticSearch搜索引擎袁具有IK分词的全文检索获取商品数据同步更新商品数据渊JSON格式冤到ES搜索引擎初始数据同步ES服务1172019.06表1es_database类似于MySQL中的数据库名称袁类型es_good_info类似于MySQL中的商品数据表good袁文档类似于good表中商品信息袁而文档ID类似于good表中的商品信息的主键id遥4援1援3JSON数据格式JSON英文全称是JavaScriptObjectNotation袁即JavaScript对象简谱袁它是当前互联网中比较常用的一种轻量级的数据交换格式袁其简洁和清晰的层次结构使得JSON成为理想的数据交换格式袁同时易于人阅读和编写袁也易于机器解析和生成袁有效地提升网络传输效率遥如MySQL数据库中的商品表good的信息如表1所示遥将上面的商品数据信息转化为JOSN数据格式如下院{id:2018001,title:商品名称,intro:商品简介,detail:商品详情}4援1援4初始数据同步ES服务初始数据同步ES服务是将MySQL数据库中商品表good的现有数据同步到ES搜索引擎袁在同步商品数据到ES的过程中袁需要逐条获取商品表good中的所有数据袁转换为JSON数据格式袁然后在同步到Elasticsearch搜索引擎的索引es_database中的类型es_good_info中遥该服务是在Elasticsearch服务搭建完成初次使用之前起作用袁其目的是保证了MySQL中商品表good的商品数据和Elasticsearch中的商品信息一致遥4援1援5实时数据同步ES服务实时数据同步ES服务是将MySQL数据库中商品表good的商品信息的增加尧修改尧删除等操作对数据的影响实时同步到ES搜索引擎袁即当用户或系统管理员对商品进行操作并且商品信息发生改变时袁系统会获取该商品改变后的信息袁并且转换为JSON数据格式袁通过调用ES服务接口将商品信息同步到ES搜索引擎遥4援2系统核心代码实现渊1冤全文检索系统采用B/S架构的Maven项目构建袁在全文检索系统的Maven项目的pom.xml文件中引入ES搜索引擎的jar包和JSON数据转换的jar包袁并使用了基于Java的SpringMVC实现遥渊2冤使用Java实现ES搜索引擎的服务接口遥在ElasticsearchTool中创建ES客户端连接client渊使用单例设计模式袁提高对象资源的重复利用率冤院client=TransportClient.builder().build().addTrans鄄portAddress(newInetSocketTransportAddress(InetAd鄄dress.getByName(SERVER_ADDRESS),SERVER_PORT));往ES搜索引擎增加或修改数据袁调用prepareIndex()方法院client.prepareIndex(DATA_BASE,table_name).setId(do鄄cId).setSource(source).execute().actionGet();根据索引尧类型和文档ID删除ES搜索引擎中的数据袁调用prepareDelete()方法院client.prepareDelete(DATA_BASE,table_name,id).setRefresh(true).execute().actionGet();渊3冤配置ES搜索引擎服务的IK分词器遥IK分词器是一款国人开发的相对简单的中文分词器袁它是基于正向匹配的分词算法遥IK分词器基本可分为两种模式袁一种为ik_max_word模式袁一种为ik_smart模式遥在ik_max_word模式下袁IK分词器会将能够分出来的词全部输出曰而在ik_smart模式下袁IK分词器则会根据内在方法输出一个认为最合理的分
本文标题:基于Elasticsearch全文检索系统的实现
链接地址:https://www.777doc.com/doc-7882130 .html