大数据存储-文档存储数据库_第1页
大数据存储-文档存储数据库_第2页
大数据存储-文档存储数据库_第3页
大数据存储-文档存储数据库_第4页
大数据存储-文档存储数据库_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档存储数据库—ElasticSearch在某电影网站的数据库中存在海量用户对电影的评分数据,电影网站希望通过这些数据对用户实时推送用户感兴趣的电影,以供用户参考。基于这一需求,寻找一个解决实时大规模数据检索问题的方式成为了电影网站最紧迫的工作。用户对电影的评分数据包含用户编号(UserID)、电影编号(MoiveID)、评分(Ratings)、评分时间(Timestamp)4个字段。项目描述项目背景当面对庞大的数据量时,MySQL、Oracle等传统数据库越来越难以满足实时大规模数据检索的需求。然而幸运的是,ElasticSearch正式为解决实时大规模数据检索提供了有效方案。ElasticSearch有3大突出特点。分布式实时文件储存。优秀的横向扩展能力。实时分析的分布式搜索引擎。项目描述项目目标学习ElsaticSearch的基础知识、相关术语和ElasticSearch集群的搭建过程,结合电影用户评分实例搭建ElasticSearch集群。学习ElasticSearchHead的配置与基础操作,并使用Head插件在可视化的操作界面中实现用户和电影信息数据的增删查改操作。学习ElasticSearch开发环境的搭建过程和ElasticSearchJavaAPI基础使用方法,搭建ElasticSearch开发环境,并使用ElasticSearchJavaAPI对电影用户评分数据进行存储与查询。使用ElasticSearchJavaAPI中的聚合操作API查询出电影评价次数超过50的用户信息。项目描述项目分析1Head扩展插件存储数据目录认识ElasticSearch2Java存储用户数据3Java查询插入的数据记录4查询评价电影超过50的用户5随着科技水平的发展,数据呈现出爆发式增长的态势,在全球范围内每天都会新增数以千万计的数据。当涉及到庞大的数据集时,传统的关系型数据库的工作速度相对较慢,导致从数据库中查询检索的速度也相对较慢。现在的企业都在寻找其他的方式存储数据,以便于快速检索,而ElasticSearch的提出在一定程度上解决了这一问题。本小节的任务是介绍ElasticSearch的基础概念、术语、特点、应用场景、集群的搭建等内容。任务描述ElasticSearch是一个基于ApacheLucene的开源分布式全文检索引擎,无论在开源还是专业领域,Lucene都可以被认为是迄今为止最先进、性能最好、功能最全的搜索引擎库之一。Lucene只是一个库,想要使用它,用户必须使用Java作为开发语言并将其直接集成到用户的应用中。不仅如此,Lucene还非常复杂,用户需要深入了解检索的相关知识,才能理解它是如何工作的。ElasticSearch的出现弥补了Lucene的这些缺点。ElasticSearch虽然也是使用Java开发并使用Lucene作为其核心,实现所有索引和搜索的功能,但是它的目的是通过简单的RESTfulAPI隐藏Lucene的复杂性,从而让全文搜索变得简单。了解ElasticSearch1.ElasticSearch概述ElasticSearch不仅仅是Lucene和全文搜索,还能可以描述为以下方式。分布式的实时文件存储,每个字段都被索引并可被搜索。分布式的实时分析搜索引擎。可以扩展到上百台服务器,处理PB级结构化或非结构化数据。了解ElasticSearch因为ElasticSearch与同为文档型数据存储的MongoDB都属于NoSQL数据库,二者均没有Schema,并且都支持全文索引,所以这两者的很多功能和特性比较相似,但是其实两者在本质上存在巨大的差异。MongoDB与ElasticSearch的差异了解ElasticSearch对比项MongoDBElasticSearch备注定位文档型数据库文档型搜索引擎MongoDB侧重管理数据,ElasticSearch侧重检索数据数据大小PB级TB级到PB级两者都支持分片和横向扩展写入延迟低高ElasticSearch侧重与检索数据,读写能力难免较差全文索引支持度一般非常好ElasticSearch作为搜索引擎,检索数据性能非常优秀性能非常好好MongoDB在大部分场景性能比ElasticSearch强索引结构B树LSM树ElasticSearch追求写入吞吐量,MongoDB读写比较均衡资源占用一般高MongoDB使用C++,ElasticSearch使用Java开发索引(Index)索引是具有相同结构的文档集合,索引相当于关系数据库的库。在系统上索引的名字全部为小写,通过这个名字可以用于执行索引、搜索、更新和删除等操作。在单个集群中,可以定义任意多个索引。类型(Type)在索引中,只能定义一个类型,类型是索引的逻辑分区。类型相当于关系数据库的表,在一般情况下,一个类型被定义为具有一组公共字段的文档。了解ElasticSearch2.ElasticSearch术语文档(Document)文档是存储在ElasticSearch中的一个JSON格式的字符串。文档可以类比于关系数据库的表中的行数据。每个存储在索引中的一个文档都有一个类型(Type)和一个ID,每个文档都是一个JSON对象,存储了零个或多个键值对。每个文档实际储存的内容被存储在一个名为_source的字段中,当搜索文档时默认返回的就是这个字段。主键(ID)ID是一个文件的唯一标识,如果在存库时没有提供ID,那么系统将会自动生成一个ID。因此,文档的index/type/id必须是唯一的。映射(Mappings)映射相当于关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围内的设置。映射可以在创建时被定义,或在第一次储存文档的时候自动识别。了解ElasticSearchREST表述性状态传输(REpresentationalStateTransfer,REST),它通常是开发的一种约定,当所有的开发者都遵从这种约定时,可以大大简化开发的沟通成本。REST约定使用HTTP的请求头POST、GET、PUT、DELETE对应CRUD(create、read、update、delete)的4种数据操作。如果设计的应用程序能符合REST原则,那么设计的应用程序可称为RESTfulAPI。请求头的功能如表所示。了解ElasticSearch请求头功能POST用于更新文档,类似于mysqlupdate操作GET用于检索文档,类似于mysqlsearch搜索select*操作PUT用于新建文档,类似于mysqlinsert插入操作DELETE用于删除文档,类似于mysqldelete操作数据类型由于ElasticSearch以JSON格式的文档储存数据的特性,所以ElasticSearch支持众多数据类型。常见的数据类型及其说明如下表。了解ElasticSearch类型说明text当一个字段需要用于全文搜索(会被分词)时,如产品名称、产品描述信息,则应该使用text类型keyword当一个字段需要按照精确值进行过滤、排序、聚合等操作时,则应该使用keyword类型,keyword类型的数据不会被分词date因为JSON没有日期数据类型,所以在ElasticSearch中,日期可以是多种形式的binary二进制类型是Base64编码字符串的二进制值,不以默认的方式存储,且不能被搜索arrayElasticSearch中没有专门的数组类型,直接使用[]定义即可objectJSON文档是分层的,文档可以包含内部对象,内部对象也可以包含内部对象nested嵌套类型是对象数据类型的一个特例,可以让array类型的对象被独立索引和搜索geopoint地理点类型用于存储地理位置的经纬度对ElasticSearch文档搜索引擎存在以下特点。横向可扩展性:ElasticSearch作为大型分布式集群,很容易将新的服务器扩展到ElasticSearch集群中;同时也可运行在单机上作为轻量级搜索引擎使用。近实时的搜索:ElasticSearch完全继承了ApacheLucene的近实时的搜索。安装方便:ElasticSearch不依赖于其他组件,只用修改几个参数即可搭建一个集群。了解ElasticSearch3.ElasticSearch特点RESTful:ElasticSearch基本所有操作(索引、查询、甚至是配置)都可以通过HTTP接口进行。更丰富的功能:与传统关系型数据库相比,ElasticSearch提供了全文检索、同义词处理。分片机制提供更好地分布性:同一个索引被分为多个分片(Shard),利用分而治之的思想提升处理效率。高可用:ElasticSearch提供副本(Replica)机制,一个分片可以设置多个副本,即使在某些服务器宕机后,集群仍能正常工作。了解ElasticSearchElasticSearch与关系型数据库的差异。了解ElasticSearch对比项关系型数据库ElasticSearch定位关系型数据库文档型搜索引擎结构化结构化数据非结构化的JSON数据数据大小GB到TB级数据TB到PB级数据扩展难度困难非常容易容错针对单个或少个节点宕机没有影响需要额外较复杂的配置索引支持支持倒排索引ElasticSearch高效的查询和海量数据的存储,使其在一些实时响应方面得到青睐。ElasticSearch具有以下几个应用场景。搜索领域:包括百度、谷歌、全文检索、高亮、搜索推荐等。内容网站:基于用户产生的行为日志(点击、浏览、收藏、评论)和社交网络数据进行分析,包括网站内容搜索等。StackOverflow(IT技术论坛):全文检索,搜索相关问题和答案。GitHub:开源代码管理搜索管理其托管的上千亿行代码。

了解ElasticSearch4.应用场景续上页。日志数据分析:ELK技术栈(ElasticSearch+Logstash+Kibana)对日志数据进行采集和分析。商品价格监控网站:用户设定某商品的价格阈值,当价格低于该阈值时,向用户推送降价消息。BI系统:分析某区域最近3年的用户消费额的趋势、用户群体的组成结构等。其他应用:电商、招聘、门户等网站的内部搜索服务,IT系统(OA、CRM、ERP等)的内部搜索服务、数据分析等。了解ElasticSearchElasticSeach作为分布式存储文件存储系统可在Hadoop集群之上进行部署,集群环境具体要求如表所示。ElasticSearch是基于Java开发的一个组件,运行在JVM中,本章节中安装的ElasticSearch版本为6.5.4,所以每个节点中的JDK版本要在1.8.0或以上。安装分布式ElasticSearch1.环境准备系统内核版本节点名称IP地址centos6.13.5+master30centos6.13.5+slave131centos6.13.5+slave232centos6.13.5+slave333head插件本质上是一个Node.js的工程,所以需要安装Node.js,并使用npm安装依赖包。在Node.js官网下载并解压node-v9.3.0-linux-x64.tar.gz到/usr/node目录下。将解压后的目录文件发送到其余节点(slave1,slave2,slave3)。因为所有的节点都需要安装Node.js,所以为了避免到每个节点重复相同的操作,可在XShell的菜单栏中打开“工具”→勾选“发送键盘输入到所有会话”,将所有命令发送到各个节点上,并运行解压命令(tar)。解压完node-v9.3.0-linux-x64.tar.gz后,需将解压后的安装目录的路径配置到环境变量中,执行vim/etc/profile命令,修改配置文件。运行命令“source/etc/profile”

使新配置的环境变量生效。测试Node.js是否已正常安装。当Node.js正常安装时,Node.js与npm的版本号应为一致。安装分布式ElasticSearch2.安装Node.js环境在ElasticSearch官网中下载文件名为elasticsearch-6.5.4.tar.gz的软件包,并上传软件包到各个节点上。勾选“发送键盘输入到所有会话”,将所有安装配置ElasticSearch命令在各个节点上运行。ElasticSearch集群配置信息保存在elasticsearch.yml文件中,配置中最重要的两项是与network.host两项参数,分别配置每个节点对应的节点名和节点IP地址,注意各节点的配置不可出现重复的节点名或节点IP地址

配置/etc/security/limits.conf文件,修改每个进程最大同时打开文件数和最大线程个数。运行vim/etc/sysctl.conf命令,修改sysctl.conf文件中vm.max_map_count参数,该参数设置进程可以适用的的VMA(虚拟内存区域)数量。修改完成后,执行“sysctl-p”命令,使修改的配置生效。安装分布式ElasticSearch3.配置分布式ElasticSearch运行“vim/etc/security/limits.d/90-nproc.conf”命令,修改ElasticSearch用户的最大进程数。当ElasticSearch的相关配置完成时,即可启动ElasticSearch集群。启动时需要注意的事项如下。由于安全的考虑,ElasticSearch不允许使用root用户启动,所以需要创建一个新的用户,并为这个账户赋予相应的文件权限。创建ElasticSearch运行用户。为了减少重复的操作,可以使用“发送键盘输入到所有会话”的功能,为所有节点都创建同名的用户作为ElasticSearch运行用户。安装分布式ElasticSearch验证是否安装成功。进入30:9200/_cat/nodes(ElasticSearchWeb接口)。若集群正常启动,则可在浏览器中看见集群各节点的信息。结果如图所示。安装分布式ElasticSearch1Head扩展插件存储数据目录认识ElasticSearch2Java存储用户数据3Java查询插入的数据记录4查询评价电影超过50的用户5ElasticSearch-Head是Web前端,用于浏览和与ElasticSearch集群进行交互。ElasticSearch-Head提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能的管理插件,

如在head插件页面编写RESTful接口风格的请求,即可对ElasticSearch中的数据进行增、删、改、查、创建或删除索引等操作。本小节的任务要求实现利用Head插件储存用户信息和电影信息数据,实现创建索引和数据的增删查改等功能。任务描述用户信息数据(users.dat)中包含UserID(用户ID)、Gender(性别)、Age(年龄)、Occupation(职业)和Zip-code(编码)等字段,数据示例如下图所示。电影信息数据中包含MovieID(电影ID)、电影名(Name)、电影类型(Type)等字段,示例数据如下图所示。任务描述在GitHub上下载Head插件,下载文件名为elasticsearch-head-master.zip的Head安装包,将Head安装包上传到master节点上并解压。通过npm安装Grunt。Grunt是运行在Node.js上面的任务管理器(Taskrunner),它可以在任何语言和项目中自动完成指定的任务。Grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等的工作,其中ElasticSearch6.0以上版本的Head插件是通过Grunt启动的,因此在安装Head插件时需要安装Grunt。设置Head的相关配置。修改elasticsearch-head-master文件夹下的Gruntfile.js文件。配置Head的服务器监听端口。增加hostname属性。设置为hostname:'*'。配置head插件修改/usr/local/elasticsearch-head/elasticsearch-head-master/_site/app.js文件,配置Head的连接地址,将localhost修改为ElasticSearch的服务器地址。启动ElasticSearch-Head插件和grunt。若再次启动grunt,出现如下图所示错误,这是由于缺少相关依赖包,需要安装缺失的依赖包。配置head插件Head插件启动成功后,浏览器访问30:9100/(ElasticSearch为启动状态),即可看见Head的主界面,如下图。配置head插件在Head插件中创建索引非常方便。在head的web主界面→“索引详情界面”→“新建索引”→输入索引名→单击“OK”按钮,即可完成索引的创建,创建成功后会提示。创建与修改索引直接创建的索引不会产生映射。在ElasticSearch中索引映射的生成方式有3种。创建后再修改索引进而添加映射。创建索引时添加映射。插入数据时自动生成映射。创建后再修改索引添加映射和创建索引时添加映射,这两种方式都是通过head插件中的复合查询,向ElasticSearch集群提交索引映射,而创建索引后再添加映射实质上是修改索引。创建后再添加映射只能修改映射,不能修改如分片数量、副本数量等设置。添加索引“teacher”的映射,当界面右侧中返回"acknowledged":true的信息时,则代表修改成功。创建与修改索引创建索引时添加映射的方式可以定义分片数量、副本数量等设置。创建索引“student”并添加设置和索引。创建与修改索引在30:9100/网页中的界面中,可直接看见创建的索引,还可以获取索引的分配信息和集群状态。“teacher”索引主分片是4个,绿色即为该分片状态健康。创建与修改索引打开其中索引的信息下拉框→“索引信息”,即可看见索引的状态、分片、映射。创建与修改索引增加数据是将一条新的数据增加到对应的索引中,使之能够进行搜索,增加的数据格式是JSON格式。如果索引已经有映射,那么增加的数据类型必须与映射相符;如果索引没有映射,那么将会根据增加的数据生成对应的映射。当增加数据时必须提供索引、类型,如果没有提供ID,那么系统会自动生成一个ID,而且在ElasticSearch中如果有相同ID的文档存在,那么更新此文档。增加、删除、与修改数据1.增加数据向student索引的student_info类型中插入提供ID文档。使用的关键字为PUT,设置插入ID为1,成功提交请求后在返回的信息中,ID为用户指定的ID(_id为1),以此方式插入若干条数据,为后续章节查询介绍提供数据。增加、删除、与修改数据向student索引的student_info类型中插入不提供ID的文档。使用的关键字为POST,不设置插入ID,成功提交请求后在返回的信息中,ID值将为系统自动生成的ID。结果如图所示。增加、删除、与修改数据用户可以通过利用POST提交修改数据的请求。调用POST修改数据时,需要提供修改文档的索引、类型、ID,ElasticSearch使用版本号控制文档获取或重建索引。以修改索引student的数据为例,修改文档ID为1的“Gender”字段为“M”。在返回的信息中“result”字段值为“updated”,而且版本号“_version”也变成了2。增加、删除、与修改数据2.修改数据删除数据的操作相对简单,只需要提供对应文档的索引、类型、ID,调用DELETE关键字提交请求即可删除该文档。若返回的信息中“result”字段的值为“deleted”,则说明该文档删除成功。增加、删除、与修改数据3.删除数据URL参数查询会构造HTTP请求,并在HTTP请求提交到ElasticSearch集群后,返回需要查询的结果,基本语法如下。#查询单个文档数据GEThttp://<ip>:<port>/<索引>/<类型>/<文档ID>#查询多个文档数据GEThttp://<ip>:<port>/<索引>/<类型>/_search?参数查询数据1.URL参数查询当查询单个文档数据时,必须提供文档的索引、类型、文档ID。当查询多个文档数据时,文档的索引是必须提供的,而类型则为可选项。在请求中可以设置多个参数,参数之间可使用&分开。常用参数的说明如下表。查询数据1.URL参数查询参数解释q查询字符串,如q=name_source是否包含源数据,同时支持_source_include和_source_exlcludefields只返回索引中指定的列,多个列中间用逗号分开sort根据字段名排序,如fieldName:asc或fieldName:desctimeout超时的时间设置from返回的索引匹配结果的开放值,默认为0size搜索返回的结果条数,默认为10在Head插件中使用URL参数查询单个文档数据,如下图。在返回信息中还包含了文档的索引类型的归属、ID、版本号等。查询数据在Head插件中使用URL参数查询多个文档数据示例结果,如下图。设置了q、fields、size三个参数,查询“Gender”字段值为“M”文档的“Name”“Gender”字段数据,并限制返回数据条数为5。查询数据Elasticsearch提供了一个基于JSON的完整特定领域的语言(DomainSpecificLanguage,QueryDSL)定义查询。POST请求参数查询即以QueryDSL作为参数,通过POST方式提交请求。QueryDSL可看作是查询的AbstractSyntaxTree(AST),由两种类型的子句组成,分别是叶查询子句和复合查询子句。查询数据2.POST请求查询叶查询子句用于将查询字符串与一个字段(或多字段)进行比较,而复合查询子句用于合并其他的子句。复合查询子句能合并任意其他子句,包括叶查询子句和其他复合查询子句。QueryDSL的基础语法如下,语法中索引是必须提供的,类型可选提供。POSThttp://<ip>:<port>/<索引>/<类型>/_search{ query_parameter:{ fieldname: value, fieldname: value, ... }}查询数据QueryDSL的主要参数说明查询数据参数说明match支持全文搜索和精确查询,查询结果取决于字段是否支持全文检索。keyword类型不支持分词,text类型支持分词match_all用于匹配所有文档。在没有指定查询方式时,它是默认的查询multi_match用于多字段查询,如查询color和ad字段包含单词red的文档range用于范围查询term用于精确值查询termsterms查询与term查询基本一样,但terms查询允许指定多值进行匹配,如果所查询的字段包含了指定值中的任何一个值,那么被查询的文档就满足了terms查询条件exists用于查找指定字段中是否存在特定值missing用于查找指定字段中是否不存在特定值filter用于过滤指定字段的值bool用于合并多个过滤条件查询结果的布尔逻辑,包含的操作符有must、must_not、should查询索引student中,“Gender”字段值为“M”的数据。查询数据复合查询子句包含叶查询语句和其他的复合查询,如查询“StudentID”字段的值小于202004,且性别为男性(Gender为M)数据时,所使用的就是由两条叶查询语句组合在一起的复合查询语句。查询数据在插入数据之前,需要先创建储存用户信息数据和电影信息数据的索引。创建用户信息索引操作结果如下图。任务实现插入数据到用户信息索引。任务实现插入数据到电影信息索引。任务实现查询用户信息数据。任务实现查询电影信息数据。任务实现1Head扩展插件存储数据目录认识ElasticSearch2Java存储用户数据3Java查询插入的数据记录4查询评价电影超过50的用户5ElasticSearch是基于Java开发的,对Java的支持能力相对较好,使用Java开发ElasticSearch是一个不错的选择。将Java开发ElasticSearch看作CS模式,即客户端请求,服务端响应,所有的操作是完全异步的。本小节的任务要求在IDEA上搭建ElascticSearch开发环境,并利用ElasticSearchJavaAPI创建用于存储用户对电影的评分数据索引,批量插入用户对电影的评分数据。任务描述在IDEA上搭建ElascticSearch开发环境的步骤如下。新建一个Maven项目。添加支持ElascticSearchJavaAPI资源包的依赖。完成资源包的加载,即可完成搭建。搭建ElascticSearch开发环境在IDEA中依次打开“File”菜单→“New”→“Project”→“Maven”,在弹出的对话框中选择对应的JDK版本。搭建ElascticSearch开发环境对话框中填入组名、项目名,即可创建成功。搭建ElascticSearch开发环境Maven项目新建成功后的界面如下图。因为Maven项目的依赖资源还没有被导入,所以在创建成功后还无法正常连接ElasticSearch集群。需在pom.xml文件中声明依赖,保存文件后,IDEA会自动检查并导入pom.xml文件中依赖资源。搭建ElascticSearch开发环境在IDEA上连接ElasticSearch集群需要通过org.elasticsearch.client提供的RestHighLevelClient()方法,创建一个ElasticSearch的高级客户端对象,用于配置集群的相关信息。利用JavaAPI创建索引,需要调用org.elasticsearch.action.admin.indices.create中的CreateIndexRequest()方法声明一个创建索引请求的对象。在ElasticSearchJavaAPI中所有请求最终都会被转换成JSON格式,所以ElasticSearchJavaAPI的请求实例可以接受key-pairs、JSON格式的字符串、XContent、Map等数据类型作为类型参数。创建与修改索引1.创建索引当索引创建成功后,虽然无法通过ElasticSearchJavaAPI修改或删除原有的映射,但是允许新增映射操作。ElasticSearch还提供了修改索引设置的JavaAPI。创建与修改索引2.修改索引当增加数据时,必需提供文档的索引、类型,文档ID为可选提供项。如果没有提供文档ID,那么系统会自动生成一个唯一的ID。增加、删除、与修改数据1.增加数据2.删除数据删除数据相对简单,只需提供需要删除的文档的索引、类型、ID即可。修改数据也需要提供文档的索引、类型、文档ID,并且还要提供修改的字段名和字段新的值。以修改ID为2的文档为例,将“age”字段的值改为23,“gender”字段的值改为“F”。增加、删除、与修改数据3.修改数据批量操作ElasticSearch提供了BulkAPI功能。BulkAPI允许使用单一请求实现对文档的多个action,即create、index、update或delete,各个action的功能详情如下表。action功能解释create用于当文档不存在时创建文档index用于创建新文档或替换已有文档update用于局部更新文档delete用于删除一个文档创建用于储存用户对电影评分数据的索引,并添加映射。因为评分数据的数量多达1000298条,采用逐条数据插入的方式速度较慢,所以需调用批量操作BulkAPI插入数据,提高速率。当程序运行成功后,在Head网页的数据浏览界面中可直接查询到新增的数据。任务实现1Head扩展插件存储数据目录认识ElasticSearch2Java存储用户数据3Java查询插入的数据记录4查询评价电影超过50的用户5ElasticSearch作为一个分布式搜索引擎拥有十分强大的数据吞吐能力,具备近实时的数据检索能力,以及强大的查询能力。本节的任务是使用ElasticSearchJavaAPI实现查询用户对电影的评分数据中,编号为3952的电影,在2000-04-26到当前时间所获得的评分大于3的文档数据。任务描述在ElastcSearchJavaAPI中提供了GetAPI,用于获取单个文档的数据。当利用GetAPI查询数据时,需要提供目标文档的索引、类型和文档ID,最后将一个GetRequest类的实例对象提交到客户端。查询school索引中文档ID为2的数据。调用GetAPI查询ElasticSearch作为一个分布式文档搜索引擎,搜索查询的功能十分的强大。ElasticSearch提供了大量的SearchAPI以支持QueryDSL的需求。调用SearchAPI需要创建一个SearchSourceBuilder实例对象作为SearchRequest查询请求对象的参数提交客户端,用户可以使用自定义查询的方法。调用SearchAPI查询1.叶查询子句常用查询方法的说明调用SearchAPI查询方法描述QueryBuilders.matchQuery(Stringname,Stringtext)支持全文搜索和精确查询,全文检索需取决于字段是否支持QueryBuilders.matchAllQuery(Stringname,Stringtext)用于匹配所有文档QueryBuilders.matchPhraseQuery(Stringname,Stringtext)用于短语查询,精确匹配,如查询“ared”,查询出结果只会是包含了“ared”完整字段的数据QueryBuilders.rangeQuery(Stringflied).gte(Intnum).lt(Intnum)用于范围查询,查询某字段值满足设定范围的文档利用SearchAPI实现查询实例调用SearchAPI查询在ElascticSearch中,查询与过滤语句非常相似,在功能上二者都可以将满足特定条件的文档提取出来,但是它们由于使用目的不同而稍有差异。过滤语句侧重于查看文档字段是否包含着特定值,而查询语句则侧重于查看匹配的程度如何。另一方面是性能的差异,一条经过缓存的过滤查询要远胜一条查询语句的执行效率。在Java中过滤操作必须结合布尔查询使用。过滤“school”索引中“studentId”不在202002~202006闭区间内的文档。调用SearchAPI查询复合查询子句能合并任意其他子句,包括叶查询子句和其他复合查询子句。在SearchAPI中可以通过特定的逻辑运算符结合多个叶子查询子句,实现复合查询。调用SearchAPI查询2.复合查询子句有些查询需求可能会对查询的数据有特定的输出要求,如查询文档的数量限制、排序输出等,这些需求只需在提交请求为SearchSourceBuilder实例对象时添加对应的设置即可实现。输出设置方法解释SearchSourceBuilder.size(intsize)设置返回文档的数量SearchSourceBuilder.from(intfrom)设置从某个ID开始查询SearchSourceBuilder.sort(Stringname)以指定字段排序输出,默认为升序SearchSourceBuilder.sort(Stringname,SortOrderorder)以指定字段、指定排序方式输出SearchSourceBuilder.sort(SortBuildersort)特殊排序方式,支持以ID、特定字段、得分排序以查询“school”索引中的所有数据为例,设置从ID为0开始查询、返回文档数为5、以“age”降序输出,结果如图所示。输出设置基于设定3个查询条件实现ElastiSearchJavaAPI查询任务,3个查询条件内容如下。电影编号为“3952”。评论时间为2000-04-26至今。电影评分大于或等于3。任务实现1Head扩展插件存储数据目录认识ElasticSearch2Java存储用户数据3Java查询插入的数据记录4查询评价电影超过50的用户5聚合是一种基于搜索的数据汇总,通过组合可以完成复杂的操作,可以对文档中的数据进行统计汇总、分组等,对一个聚合进行操作可以看作在一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论