Elastic Search 新手入门笔记(一)-阿里云开发者社区

开发者社区> 开发与运维> 正文

Elastic Search 新手入门笔记(一)

简介: 前言 因为最近在写一个功能点是与Elastic Search 相关的,所以最近在完成功能的基础上,还去查了很多有关于Elastic Search的文档。Elastic Search 的 client ,还是不少的,但是现在我只用了Java High Level REST Client。

前言

因为最近在写一个功能点是与Elastic Search 相关的,所以最近在完成功能的基础上,还去查了很多有关于Elastic Search的文档。Elastic Search 的 client ,还是不少的,但是现在我只用了Java High Level REST Client。下面是进行的总结,希望也可以帮助像我一样的小白。

多说一点: 这是我的第一篇笔记,作为一个马上要毕业的大学生来说,多学,多听,多积累,是很有必要的。有可能语言上比较晦涩难懂,技术的阐述上也不是那么娴熟准确,但是我会好好努力的。

为什么用到Elastic Search?

这里的Elastic Search 泛指的是全文检索。在刚接触的时候,我想过这样一个问题,在关系型数据库mysql的like进行模糊查询的效果,与Elastic Search这样的全文检索,效果几乎就是一样的,那为什么还要用全文检索呢?如果是学了一些的现在的我,遇上了刚开始接触全文检索的我的话,一定会指着自己的鼻子说:“你真是无知啊。”

原因我觉得一共有两个:

第一个是查询的速度特别快!在关系型数据库中,数据是结构化的,我们当要进行模糊查询的时候,会从想要查询的表的第一条数据开始比对,如果不是,继续下一条,如果再不是,继续去查,就这样一直查下去,直到查到了,自己想要的那条数据。而Elastic Search呢?它其实使用了倒排索引的索引方法。大概意思其实是这样的:现在一个有三篇文章

|   id    |         content               |

|--------|------------------------------|

|文章1| Java是世界上最好的 . |

|文章2| 人生苦短,快学python|

|文章3| C++是世界上最难的 .  |

这也是存储在关系型数据库中的存储形式,查询的话,他会一行行的进行查询。而如果存在了Elastic Search 中会变成什么样子呢?在全文检索中存在这分词器这么个东西,分词器会把输入的句子自动的进行一定规律进行分割,例如过空格分割,下划线分割,等等。如果是中文,也有插件可以对其进行语义分割。分割后的效果如下所示(只是举例子,真实情况未必如此)

|关键词   | 文章号|

|------------|----------|

|世界       | 1,3    |

|人生苦短|   2 .     |

|Java       |   1 .     |

|python    |   2       |

|C++        |   3       |        

当我们输入世界,立刻就知道出现在了第一个,和第三个文章中。

第二个是因为我们在做全文检索的时候,根本用不到那么复杂的逻辑,我们用到基础的增删改查就行,使用了Elastic Search 之后,我们在用不用折腾数据库那么多的数据了。

我们怎么去使用Elastic Search?

在我们看来学习一门新的技术最主要的还是要去多看看官网,最基本能用到的官网应该都会说。这是官网传送门:https://www.elastic.co/ ,接下来是 rest high level api的传送门:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.3/java-rest-high-getting-started-initialization.html。官网上有怎么进行下载,安装,如何使用的方法。如果觉得官网写的不是那么细致还有大牛们在各大博客上,进行的知识分享。

以下是使用Rest high level api 操纵Elastic Search的

https://www.cnblogs.com/ginb/p/8716485.html

https://blog.csdn.net/paditang/article/details/78802799

还有使用curl操纵Elastic Search 的

https://www.cnblogs.com/mycd/p/7859792.html

个人使用经验

刚使用了半个多月,以下是我的个人拙见,分析也不是特别全面。

我个人在简单的连接到Elastic Search 的时候,使用的是Post Man,有可能是因为先入为主的原因吧,在上大学的时候,无意间接触到了这个神奇,然后便一发不可收拾。它可以发送get,post , put, delete 等 所有的rest api 。并且可以携带上各种参数,无论是在请求头,还是请求体。不但如此,在有spring security防护下的项目,我们可以携带上token进行访问。不但如此,我最喜欢的还是他能存储url的功能,方便快捷。所有这些功能,再有可视化界面的加持下,显得更加的舒服。

Post Man 操纵Elastic Search 命令如下 :

首先我先声明一个全局变量(开个玩笑)其实就是把下文中的所有 http://ip:port/_index/_type 换成了 ES ,这里值得说一下的是_index类似于像是database的概念,_type类似于table的概念。以上参数都可以换成自己对应的参数。

创造一个文档,我们使用PUT请求,url为: ES/_id content-type选择application/json,然后写一个json数据例如:

{

    "first_name" : "John",

    "last_name" :  "Smith",

    "age" :        25,

    "about" :      "I love to go rock climbing",

    "interests": [ "sports", "music" ]

}

这样就成功创建了一个文档。可以使用不同的_id创建多个文档,如果我们使用了相同的id使用不同的json数据,那么相当于修改操作。

查询一个文档,我们使用GET请求,url为:ES/_id。在这里如果添加了?pretty。形如ES/_id?pretty那么结果就会显示为整齐json格式。返回的结果中的 _source为本文档用户插入的数据,其余的为这篇文档的元数据。

如果我们使用了ES/_search,那么就是不添加任何条件,进行全部搜索。

如果想进行准确查询ES/_search?q=key:value。在这里key为想要查询的字段,value为想要查询的结果。

删除一篇文档,我估计我不说,大家也会猜出来了吧。没错,就是使用DELETE请求,发送ES/_id即可。

本文纯手打,不但是对自己学习的一种总结,也希望可以帮助到需要帮助的人,谢谢大家。不喜勿喷。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章