业界动态
理想国Elasticsearch入门教程
2024-10-31 19:47
  • 全文搜索引擎技术
  • 支持PB级的快速搜索
  • Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ES使用Java开发。Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

why:为什么使用

理想国Elasticsearch入门教程

  • 非常流行,且免费开源

where:在哪里用

  • 大部分Web项目都可以用

when:什么时候用

  • 当需要做搜索的时候

how:如何使用

  • 看下文
  • 百度:百度目前广泛使用Elasticsearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等,单集群最大100台机器,200个ES节点,每天导入30TB+数据
  • 新浪使用ES 分析处理32亿条实时日志
  • 阿里使用ES 构建挖财自己的日志采集和分析体系
  • 2013年初,GitHub抛弃了Solr,采用Elasticsearch 来做PB级的搜索。 “GitHub使用Elasticsearch搜索20TB的数据,包括13亿文件和1300亿行代码”
  • 维基百科:启动以Elasticsearch为基础的核心搜索架构
  • SoundCloud:“SoundCloud使用Elasticsearch为1.8亿用户提供即时而精准的音乐搜索服务”

下载ES压缩包

  • 目前Elasticsearch最新的版本是7.4.2,我们使用6.8.0版本,建议使用JDK1.8及以上
  • Elasticsearch分为Linux和Window版本,基于我们主要学习的是Elasticsearch的Java客户端的使用,所以我们课程中使用的是安装较为简便的Window版本,项目上线后,公司的运维人员会安装Linux版的ES供我们连接使用。
  • Elasticsearch的官方地址:https://www.elastic.co/cn/downloads/past-releases
  • 在资料中已经提供了下载好的6.8.0的压缩包

安装ES服务

  • Window版的Elasticsearch的安装很简单,类似Window版的Tomcat
  • 解压开即安装完毕
  • 修改:jvm.options

启动ES服务

  • 点击Elasticsearch下的bin目录下的Elasticsearch.bat启动

访问ES服务

  • 注意:9300是tcp通讯端口,集群间和TCP 客户端都执行该端口,9200是http协议的RESTful接口
  • 通过浏览器访问Elasticsearch服务器,看到如下返回的json信息,代表服务启动成功

什么是Kibana

  • Kibana是ElasticSearch的数据可视化和实时分析的工具,利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。

下载

  • https://www.elastic.co/cn/products/kibana
  • 解压即可

配置

  • 进入安装目录下的config目录的kibana.yml文件
  • 修改elasticsearch服务器的地址
  • 修改kibana配置支持中文

启动

  • kibana.bat

访问

  • http://localhost:5601/app/kibana
  • Postman中文版是Postman这款强大网页调试工具的windows客户端,提供功能强大的Web API 和 HTTP 请求调试。
  • 软件功能强大,界面简洁明晰、操作方便快捷,设计得很人性化。
  • Postman中文版能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT…),不仅能够表单提交,且可以附带任意类型请求体。

下载Postman工具

  • Postman官网:https://www.getpostman.com
  • 一直下一步就行
  • Lucene的IK分词器早在2012年已经没有维护了,现在我们要使用的是在其基础上维护升级的版本,并且开发为Elasticsearch的集成插件了,与Elasticsearch一起维护升级,版本也保持一致。
  • GitHub仓库地址:https://github.com/medcl/elasticsearch-analysis-ik

安装插件

  • 解压之后,存放到elasticsearch的plugins目录中,即可安装成功插件。
  • 注意:解压的时候,如下文件必须在plugins目录的第一级目录下
  • 重新启动ElasticSearch

测试:IK分词器有两种分词模式:ik_max_word和ik_smart模式。

  • ik_max_word:会将文本做最细粒度的拆分
  • ik_smart:会做最粗粒度的拆分,智能拆分

添加扩展词典和停用词典

  • 停用词
    • 有些词在文本中出现的频率非常高。但对本文的语义产生不了多大的影响。
    • 例如英文的a、an、the、of等。或中文的”的、了、呢等”。
    • 这样的词称为停用词。停用词经常被过滤掉,不会被进行索引。
    • 在检索的过程中,如果用户的查询词中含有停用词,系统会自动过滤掉。
    • 停用词可以加快索引的速度,减少索引库文件的大小。
  • 扩展词
    • 就是不想让哪些词被分开,让他们分成一个词。
    • 比如上面的江大桥

自定义扩展词库

  • 进入到pluginselasticsearch-analysis-ik-6.8.0config目录下, 新增自定义词典myext_dict.dic,输入“江大桥”
  • 将我们自定义的扩展词典文件,配置到IKAnalyzer.cfg.xml文件中
  • 然后重启ES
  • 重写进行测试
  • Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。
  • 然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
  • 在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
  • Elasticsearch比传统关系型数据库如下

详细说明

概念说明索引库(indexes)索引库包含一堆相关业务,结构相似的文档document数据,比如说建立一个商品product索引库,里面可能就存放了所有的商品数据。类型(type)type是索引库中的一个逻辑数据分类,一个type下的document,都有相同的field,类似于数据库中的表。比如商品type,里面存放了所有的商品document数据。6.0版本以后一个index只能有1个type,6.0版本以前每个index里可以是一个或多个type。7.0以后,没有type这个概念了文档(document)文档是es中的存入索引库最小数据单元,一个document可以是一条客户数据,一条商品数据,一条订单数据,通常用JSON数据结构表示。document存在索引库下的type类型中。字段(field)Field是Elasticsearch的最小单位。一个document里面有多个field,每个field就是一个数据字段映射配置(mappings)对type文档结构的约束叫做,用来定义document的每个字段的约束。如:字段的数据类型、是否分词、是否索引、是否存储等特性。type是模拟mysql中的table概念。表是有结构的,也就是表中每个字段都有约束信息

通过http://localhost:5601/app/kibana进入开发工具,输入以下代码进行测试

  • 有了,等于有了数据库中的。
  • 接下来就需要索引库中的了,也就是数据库中的。
  • 创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做

给lxgzhw这个索引库添加了一个名为的类型,并且在类型中设置了4个字段

  • title:商品标题
  • subtitle: 商品子标题
  • images:商品图片
  • price:商品价格

内容解释

类型名称:就是前面将的type的概念,类似于数据库中的表

字段名:任意填写,下面指定许多属性,例如

  • type:类型,Elasticsearch中支持的数据类型非常丰富,说几个关键的
    • String类型,又分两种
      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配
    • Numerical:数值类型,分两类
      • 基本数据类型:long、interger、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • index:是否索引,默认为true,也就是说你不进行任何配置,所有字段都会被索引。
    • true:字段会被索引,则可以用来进行搜索。默认值就是true
    • false:字段不会被索引,不能用来搜索
  • store:是否将数据进行独立存储,默认为false
    • 原始的文本会存储在里面,默认情况下其他提取出来的字段都不是独立存储的,是从里面提取出来的。
    • 当然你也可以独立的存储某个字段,只要设置store:true即可,获取独立存储的字段要比从_source中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置,默认为false。
  • analyzer:分词器,这里的即使用ik分词器

刚才的案例中,我们是把创建索引库和类型分开来做,其实也可以在创建索引库的同时,直接制定索引库中的类型

请求内容解释

  • 文档,即索引库中某个类型下的数据,会根据规则创建索引,将来用来搜索。
    可以类比做数据库中的每一行数据。
  • 可以看到结果显示为,是创建成功了。
  • 另外,需要注意的是,在响应结果中有个字段,这个就是这条文档数据的,以后的增删改查都依赖这个id作为唯一标示。
  • 可以看到id的值为:EwVLY24BL4R5dXuhZ–1,这里我们新增时没有指定id,所以是ES帮我们随机生成的id。

根据rest风格,新增是put,查询是get(post也可以用来做查询),不过查询一般都需要条件,这里我们把刚刚生成数据的id带上。

  • :源文档信息,所有的数据都在里面。
  • :这条文档的唯一标示
  • found:查询结果,返回true代表查到,false代表没有

主键id变为指定的id

新增时,主键不变则会将原有内容覆盖。

  • 可以看到result结果是,显然是更新数据

删除一条

  • 删除一个文档也不会立即从磁盘上移除,它只是被标记成已删除。
  • Elasticsearch将会在你之后添加更多索引的时候才会在后台进行删除内容的清理。
  • 可以看到result结果是:deleted,数据被删除。如果删除不存在的问题,result:not_found

Bulk 操作是将文档的增删改查一些列操作,通过一次请求全都做完。减少网络传输次数。相当于,将多个新增、修改、删除的请求写到一次请求当中。

注意:bulk的请求体与其他的请求体稍有不同

请求语法

语法解析

  • 每行一定要以换行符( )结尾,包括最后一行
  • action/metadata 部分,指定做什么操作
    • action代表操作的动作,必须是如下的动作之一
      • create:如果文档不存在,那么就创建
      • index:创建一个新的文档或者替换现有文档
      • update:部分更新文档
      • delete:删除一个文档,这种操作不带请求体
    • metadata,是文档的元数据,包括索引(),类型(),id()…等
  • request body 请求体,正常的新增文档的请求体内容(注意,不要带换行符)

隔离:每个操作互不影响。操作失败的行会返回其失败信息。

实际用法:bulk请求一次不要太大,否则积压到内存中,性能会下降。所以,一次请求几千个操作、大小控制在5M-15M之间正好。

注意

  • 请求体的内容不要换行
  • 请注意 delete 动作不能有请求体
  • 谨记最后一个换行符不要落下。
  • 每个子请求都是独立执行,因此某个子请求的失败不会对其他子请求的成功与否造成影响。
  • 如果其中任何子请求失败,最顶层的 error 标志被设置为 true ,并且在相应的请求报告出错误明细。
  • status属性:代表响应状态码
  • Elasticsearch提供了一个基于JSON的,在请求体内编写查询语句的查询方式。称之为请求体查询。
  • Elasticsearch 使用它以简单的 JSON接口来展现 Lucene 功能的绝大部分。
  • 这种查询语言相对于使用晦涩难懂的查询字符串的方式,更灵活、更精确、易读和易调试。
  • 这种查询还有一种称呼:Query DSL (Query Domain Specific Language),领域特定语言。

这里的query代表一个查询对象,里面可以有不同的查询属性

  • 查询类型
    • 例如, 等等
  • 查询条件:查询条件会根据类型的不同,写法也有差异

响应结果

  • 类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是or的关系

在上面的案例中,不仅会查询到电视,而且与小米相关的都会查询到。某些情况下,我们需要更精确查找,我们希望这个关系变成,可以这样做

本例中,只有同时包含和的词条才会被搜索到。

与类似,不同的是它可以在多个字段中查询。

本例中,我们在title字段和subtitle字段中查询这个词

fields属性:设置查询的多个字段

term查询,精确的关键词匹配查询,不对象查询条件进行分词

查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件,类似于mysql的in

查询价格为2699或4288的商品

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加的过滤

指定字段

  • 指定查询结果中,只显示title和price两个字段

过滤指定字段:includes和excludes

  • includes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段
  • 把各种其它查询通过(必须 )、(必须不)、(应该)的方式进行组合

查询找出那些落在指定区间内的数字或者时间。查询允许以下字符

操作符说明gt == (greater than)大于>gte == (greater than equal)大于等于>=lt == (less than)小于<lte == (less than equal)小于等于<=

发送请求:查询价格大于等于2699,且小于4000元的所有商品。

fuzzy自动将拼写错误的搜索文本,进行纠正,纠正以后去尝试匹配索引中的数据。它允许用户搜索词条与实际词条出现偏差,但是偏差的编辑距离不得超过2

发送请求:如下查询,也能查询到apple手机

修改偏差值:你搜索关键词的偏差,默认就是2,我们可以通过fuzziness修改。

可以让我们按照不同的字段进行排序,并且通过指定排序的方式。desc降序,asc升序。

假定我们想要结合使用 price和 _score(得分) 进行查询,并且匹配的结果首先按照价格排序,然后按照相关性得分排序

什么是高亮显示

  • 在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮
  • 百度搜索关键字"理想国真恵玩"

高亮查询请求

  • ElasticSearch可以对查询内容中的关键字部分,进行标签和样式(高亮)的设置。
  • 在使用match查询的同时,加上一个highlight属性
    • pre_tags:前置标签
    • post_tags:后置标签
    • fields:需要高亮的字段
      • title:这里声明title字段需要高亮,后面可以为这个字段设置特有配置,也可以空
  • size:每页显示多少条
  • from:当前页的起始索引,int from = (当前页 - 1) * 每页条数
    以上就是本篇文章【理想国Elasticsearch入门教程】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/467.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多   
最新新闻
“撒旦”人血鞋?碰瓷新疆棉花的耐克,又开始喊冤了?
继主动碰瓷新疆棉花把自己搞得股价大跌之后耐克秉承着“no zuo no die”的精神又开始暗搓搓搞“阴间操作”限量发售含人血的“撒
tiktok怎么搭建外网 详细教程及步骤
TikTok怎么搭建外网(详细教程及步骤)TikTok是一款非常流行的短视频社交应用程序,它在全球范围内拥有数亿用户。在使用TikTok的
《以案释法》步数越多,收益越高?别被“走路也能赚钱”的理财广告忽悠了
  走路也能赚到钱的理财  “丑的人还在睡觉,美的人已经跑出一杯星巴克了。”2016年的一天,一个女孩晒出的朋友圈截图引起了
如何用生意参谋算出同行店铺真实销售额
怎么经过生意顾问算出同行店肆实在销售额?大多数在淘宝天猫工作过的人都知道,他们的背景显现了同行商铺的买卖数据,这被称为买
一款最近比较火的网站统计分析系统,易分析具有什么样的功能呢?
一、产品简介北京普艾斯科技有限公司成立于2009年,服务客户1000+,包括电商、金融、保险、政务服务等行业。私有化部署,全渠道
向佐快乐大本营2024年精彩回顾:四年时光共欢笑
张大大谢娜力捧下的综艺新星张大大一位在娱乐圈中颇具人气的主持人他的成名之路离不开谢娜的提携回顾张大大的成名之路可以说谢娜
PingTools app
《PingTools app》是一款非常好用的实用工具软件,软件内拥有丰富的功能,包含了包括浏览器扫描等。使用非常简单,直接下载安装
抖音能看到谁搜索过自己吗?
尊敬的用户,您好。针对抖音平台是否能够查看谁搜索过自己的问题,我们需要做一些详细说明。首先,根据我们了解到的情况,在抖音
什么是人工智能“语料库”?为什么每个人都在谈论它?
编者按:比尔盖茨(Bill Gates)、Reddit 首席执行官和其他科技领袖越来越多地谈论“语料库”,现在是时候了解它是“何方神圣”
LED行业词语中英对应
1、led 灯具构成英文led 球泡灯:led bulbLed 贴片灯珠:SMD LEDLed驱动电源:led driver隔离电源:isolated driver非隔离电源:
本企业新闻

点击拨打: