Elasticsearch学习笔记

许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。

直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。

后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。

第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。

据说,Shay 的妻子还在等着她的食谱搜索引擎…​

Elasticsearch是Java开发的基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。

Elasticsearch的作用:1.存放海量数据。

                    2.实现快速查询。

                    3.实现高亮查询。 

                    4.支持模糊、精确查询。

Elasticsearch的使用场景:1.elk的日志场景。

                       2.业务(海量)数据的搜索。

说到Elasticsearch必须提到ELK

E:Elasticsearch  存放数据的仓库
L:LogStach 帮助我们收集各种情况下的日志(文本日志、数据库日志) 把数据写入我们的es数据库
K:Kinbana  可视化工具,可以查看报表以及通过搜索查看我们数据库所有的数据

下载地址:

Elasticsearch: https://www.elastic.co/cn/downloads/elasticsearch
Kibana: https://www.elastic.co/cn/downloads/kibana

下载完成之后双击各自bin目录下的bat文件

基本操作:

1.需要指定id

PUT dbindex/userinfo/1

2.自动生成id

POST dbindex/userinfo

3.代表文档的id

GET dbindex/userinfo/1

4.查看所有数据

GET dbindex/userinfo/_search

5.删除索引(数据库)

DELETE dbndex

创建索引,指定数据的数据类型.如果给字段的类型是keyword类型,则相当于服务没有帮助我们去分词,相当于自己创建了一个字典。如果是text类型则会帮助我们分词。

通过关键字查询数据:

GET /secound/_doc/_search?q=name:猫

ik分词器 

如上,elasticsearch的默认分词器无法识别中文中"一只"这样的词汇,而是简单的将每个字拆完分为一个词。我们可以使用第三方分词器达到我们想要的效果。

下载ik分词器包

https://https://github.com/medcl/elasticsearch-analysis-ik/releases

解压文件,将elasticsearch-analysis-ik文件中的文件拷贝到elasticsearch文件下的plugins文件中(一定要在plugins中新建一个ik命名的文件,ik分词器的版本和elasticsearch的版本一定要一样)

建一个自定义分词的字典文件,并做好配置,然后重启elasticsearch.

我在我的字典文件(data.dic)中写了:一只橘猫

查询:

k_max_word:会将文本做最细粒度的拆分,例如「一只橘猫」会被拆分为「一只橘猫、一只、一、只、橘、猫」,会穷尽各种可能的组合
ik_smart:会将文本做最粗粒度的拆分,例如「一只橘猫」会被拆分为「一只橘猫」

有一首歌叫南方姑娘很好听,我们可以先用elasticsearch的默认分词器查查看。

将南方姑娘加入我们自定义的分词字典文件中,再来查询:

.

elasticsearch的倒排索引

有一张表还有如下数据

首先说一下正排索引:正排索引就是我们可以根据id查询指定的数据,也可理解为通过人名(在不重复的情况下)找到指定的人。

倒排索引:如下.不同的条件查询的数据不同。

在elasticsearch中也一样,elasticsearch会建倒排索引。将每一行数据看成为一个document。每个document都有一个docid。那么给这些document建立的倒排索引就是:

姓名
[key]     [value]
橘猫       [1,2]
花猫       [3]

年龄
[key]      [value]
17         [1,2]
18         [3]
官方学习文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/getting-started.html

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章