分享好友 最新动态首页 最新动态分类 切换频道
Elasticsearch(全文搜索引擎)
2024-12-26 23:13

一. 简介

​ Elasticsearch是一个搜索引擎,它底层是基于Lucene来实现的。

Elasticsearch(全文搜索引擎)

​ Lucene是一个Java库,它存在着一定的问题,如果项目的开发语言不是Java,那么是无法使用 Lucene;Lucene底层设计非常的复杂,需要深入的了解搜索相关的知识,才能用好它。

​ Elaticsearch它是完全基于Restful风格的API来使用,那么就不在局限于任何一门语言,都可以直接调用接口即可实现搜索服务。

二. 倒排索引和前向索引(正排索引)

****分词就是将一句话或者一段话,按照某个语义拆分为一个个的字或者词的过程。例如

 
2.1 前向索引

前向索引在数据库领域用的很多,例如 MySQL的全文检索。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6L89unqV-1678946462776)(images/前向索引.jpg)]

2.2 倒排索引

搜索引擎中都是使用这种方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iR9NMoeR-1678946462778)(images/倒排索引.jpg)]

2.3 总结

​ 前向索引,每个文档都有一个文档的编号,每个文档的编号对应着该文档的分词信息,用户在搜索匹配的时候,根据文档编号找到该文档对应的分词,去进行分词的匹配,如果有匹配的分词,那么该文档就在最终的结果集中,所以它查询的效率会很低,但是其分词构建索引过程较快,因为每个文档的分词都是独立的。

​ 倒排索引,文档在写入搜索引擎的时候,对文档进行分词,将字典中已经存在的分词直接与文档进行映射,没有的分词,先添加到字典中,然后再映射。用户在搜索匹配的时候,直接到分词字典中去匹配,匹配到之后,将映射到该分词的文档提取出来,这种方式查询效率高,可以作相关性算分。

三. ES与Kibana的安装

3.1 ES的安装

Elasticsearch是整个 elastic 产品栈的核心,数据的存储、分词、搜索都是通过 Elasticsearch来完成。

通过 docker安装,直接执行如下命令即可

 

验证ES是否安装成功,在浏览器输入:http://ip:9200

3.2 Kibana的安装

Kibana是ES的可视化操作界面,安装方式如下所示

 

验证Kibana是否安装成功,在浏览器输入: http://ip:5601

3.3 logstash导入数据

要进入到logstash的bin目录下,打开dos命令行,导入数据使用如下的命令

 

logstash的内容如下所示

 

四. ES的基本概念

我们类比 RDBMDS 来熟悉ES的一些基本概念

RDBMSElasticsearch数据库索引表type(在ES7之后,一个索引中只有一个type,叫做 )记录文档(一个JSON对象)字段属性schemamapping

在ES中三层含义

  1. 索引,数据集
  2. 索引,将数据写入到ES的过程叫做索引。
  3. 倒排索引。

五. ES的基本增删改

查看所有的索引

 

添加数据

 

指定id添加数据

 

添加数据,如果存在就报错

 

更新文档的结构

 

删除数据

 

根据id查询数据

 

查看部分数据

 

查看数据总量

 

六. Request Body查询

查询电影名字中包含有 seconds 的所有的电影

 

查询电影的名字中包含有 beautiful 或者 mind所有的电影

 

查询电影的名字中包含有 beautiful 和 mind所有的电影

 

查询电影的名字中包含有 "beautiful mind"这个短语的所有的电影

 

如果某个字段的数据是 keyword 类型,就是做等值比较, 最好使用 term查询(term是标准的比较)

 

查询电影在 [2000, 2002] 年上映的所有的电影

 

查询电影的名字中包含有 beautiful 或者 mind,而且上映时间在 [2000, 2003] 所有的电影,多条件查询的结构如下所示

 
 

查询电影的名字和类型中包含有 Romance 所有的电影

 

查询电影名字中包含有 seconds 所有的电影,但是只查询id和title着两个属性的内容

 

查询电影名字中包含有 seconds 所有的电影,属性都不看

 

七. 前缀匹配

​ 前缀匹配是一个网站中使用频率非常高的一个功能,而且在添加和删除字符的时候都会向服务器端发送请求,对服务器和ES都是一个挑战,所以ES针对这种前缀匹配,专门设计了一个数据类型 。如果某个属性的数据类型是 ,只能进行前缀匹配,并且ES会将查询的数据放到缓存中,如果接着有其他用户进行相同的前缀匹配的时候,会直接从内存中查找。

​ ES中一旦某个索引中有数据了,我们是不能调整它的 mapping 信息,所以在ES中要向指定某个属性的数据类型的时候,需要先设定mapping.

7.1 设计mapping的思路
  1. 预先构思好索引中要存放什么数据,说白了就是有哪些属性
  1. 利用ES本身的能力(写入数据的时候,会自动创建mapping),写入一个样例数据,让ES帮我们创建好mapping.
  1. 查询mapping,按照我们的需求做出适当的调整
 
  1. 将之前的索引删掉,将修改之后的mapping添加到ES中。
 
  1. 导入正规数据
  1. 验证前缀匹配
 

八. Analysis分词

​ Analysis是分词,它内部是通过分词器(analyzer)来完成

​ Analyzer在整个分词的过程中,经过三个流程

  1. character filter,将内容的信息进行过滤
  2. tokenizer,将全文本进行分词处理
  3. token filter,去掉分词之后的停用词,然后将其他内容转小写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-suLcQp15-1678946462779)(images/Analyzer.jpg)]

8.1 ES内置的分词器

ES内置的分词器只能对英文进行分词处理,ES内置的分词器有

  1. whitespace
  2. stop
  3. standard
  4. simple

验证某个分词器的分词效果

 
8.2 IK和pinyin分词器的使用
8.2.1 IK的安装

IK是目前社区用的最多一款中文分词器,它内部包含了两个分词器,和 , 下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

安装的方式:解压到 目录下即可。需要注意的是,要使用一个文件夹将其包裹起来,因为ik分词器解压之后没有文件夹包裹的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSx5XLwL-1678946462779)(images/ik.jpg)]

ik分词的验证

 
8.2.2 pinyin的安装

pinyin就是将中文转换为拼音的方式,下载地址:https://github.com/medcl/elasticsearch-analysis-pinyin/releases?page=7

安装的方式:解压到 目录下即可。pinyin分词器是有文件夹包裹的。

 

九. 中文、pinyin前缀搜索

  1. 因为ik、pinyin他们并没有提供的完善的拼音+汉字的前缀搜索,需要在pinyin分词器的基础上定制
  1. 自定义分词器
 
  1. 定义mapping
 
  1. 插入数据
 

插入数据之后,在倒排索引的字典中会有如下的分词结果

 
  1. 执行搜索
 

“刘德华”
}

POST users/_doc/2
{
“id”: 2,
“name”: “柳宗元”
}

POST users/_doc/3
{
“id”: 3,
“name”: “柳岩”
}
POST users/_doc/4
{
“id”: 4,
“name”: “李思思”
}

POST users/_doc/5
{
“id”: 5,
“name”: “李小路”
}

POST users/_doc/6
{
“id”: 6,
“name”: “李小小”
}

 

刘德华
ldh
liudehua
柳宗元
liuzongyuan
lzy
柳岩
liuyan
ly
李思思
lisisi
lss
李小路
lxl
lixiaolu
李小小
lxx
lixiaoxiao

最新文章
如何搭建小程序?
随着移动互联网的普及,小程序已经成为了一种非常流行的应用方式,因为它可以在不需要下载安装的情况下提供完整的应用体验。因此,越来越多的人开始关注如何搭建小程序。下面,我们来简单介绍一下如何搭建小程序。现在,无需找app开发公司
附件上传的大小限制
IIS6 默认允许的附件最大上传大小为4M,在IIS7之前,当我们需要扩大这个上传限制时,比如需要将允许上传的附件上限设置为50M,则可以在web.config中做如下配置:system.webhttpRuntime maxRequestLength="51200" //system.web2. maxAllowed
百度怎么开户投放广告
百度怎么开户投放广告?作为中国最大的搜索引擎,百度每天都要处理数以亿计的搜索请求,这也为广告主们提供了一个广阔的广告投放平台。如何在百度上开户并投放广告,让自己的品牌和产品得到更好的曝光和推广,是许多广告主关注的问题。本文
高清美女写真生成:超简单的AI绘图工具推荐与使用指南
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 宝子们,想象一下,你在家里随便拍拍,竟能产生出超逼真的美女写真,这不是电影里的情节,而
sem竞价代运营公司主要负责哪些工作?揭秘sem代运营的核心职责!
在数字营销这片浩瀚的海洋中,SEM竞价代运营公司就像那艘稳健的航船,载着企业在波涛汹涌的市场中破浪前行。那么,这些代运营公司究竟负责哪些工作?他们又是如何助力企业实现营销目标的呢?今天,咱们就来揭秘SEM代运营的核心职责,让您对
以图搜图
点击详情进入查看更多搜图工具网站服务:常用搜索,以图搜图,识图,以图搜图,图像检索,图像识别,图片识别,图片搜索,图像搜索,识图,搜图,找图,拍图,拍照,常用推荐,常用搜索,以图搜图。百度图像搜索-领先的图像识别技术连接人
长沙NOIP信息学奥赛集训营咨询热线:   在线咨询: 点击交谈
长沙NOIP信息学奥赛信息 长沙NOIP信息学奥赛集训营是长沙青少儿教育品牌,形成了以乐高创意启蒙课程、人工智能编程、智能机器人编程、信息学奥赛编程等课程体系为核心,集国内外大型权威科技赛事、少儿资格认证考试、科技主题的国内外游学
微信小程序如何获取链接
微信小程序的链接获取是开发者在开发过程中需要注意的一个重要问题。链接是小程序中不可或缺的元素,它可以在不同页面之间进行导航和跳转,为用户提供丰富的交互体验。这篇文章将介绍如何在微信小程序中获取链接,并提供一些实用的技巧和注
阅读与写作兴趣班教学计划
阅读与写作兴趣班教学计划(通用12篇)  时间就如同白驹过隙般的流逝,前方等待着我们的是新的机遇和挑战,现在就让我们好好地规划一下吧。计划到底怎么拟定才合适呢?以下是小编为大家收集的阅读与写作兴趣班教学计划,希望对大家有所帮
相关文章
推荐文章
发表评论
0评