问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ElasticSearch 学习笔记

发布网友 发布时间:2024-10-02 13:08

我来回答

1个回答

热心网友 时间:2024-10-03 20:43

前言:

作为一名追求全栈web工程师的大龄程序员,ElasticSearch(ES)的学习是必不可少的。近期项目需要用到ES,于是我在网上查找视频教程,却发现大部分教程都是照本宣科,对全文检索和倒排索引的解释模糊不清。安装和集群配置等内容也让我感到困惑,这些并不适合一线程序员快速入门。因此,我决定自己到官网学习,并在此记录学习笔记,以便日后查阅。

学习技术最重要的是动手实践。在了解了ES的基本用途后,我首先在官网上找到了ES的地址:https://www.elastic.co/cn/,以及中文版的文档地址:elastic.co/guide/cn/。这是一本权威指南,内容繁多,但我会从quick start开始学习。

安装过程如下:

首先,我使用了Docker进行安装,只需执行五行命令即可。通过访问http://localhost:9200,我可以看到版本信息。Elasticsearch提供了一个可以直接访问的_cat api,如localhost:9200/_cat,可以通过这个api查看健康状况。至此,Elasticsearch的安装就完成了。

顺利的话,访问localhost:5601即可看到Kibana的首页。虽然一大堆内容看起来难以理解,但我还是直接打开了左侧菜单中的Management下的Dev tool,输入GET /即可查看版本信息。

接下来,我将开始学习Elasticsearch。对于开发者来说,最重要的三个部分是:第一个是RestApi,第二个是Java客户端,第三个是SpringData相关api。

然而,在学习过程中我遇到了一些问题。昨天我还顺利运行,但今天Kibana却出现了问题。没关系,我决定使用curl来练习一下手。由于ES的接口是基于HTTP的,所以任何能发送HTTP请求的客户端都可以用来测试。

在学习之前,我还需要介绍一下Apache下的一个开源全文检索工具包——lucene。lucene有两个实现:一个是solr,另一个就是Elasticsearch。

lucene的存储结构设计为:index、type、document。在一个lucene中可以有多个index,一个index中可以有多个type,而type存储的是相同类型的数据document。

Elasticsearch基于lucene,但它弱化了type的概念。可以有多个index,但一个index中只有一个默认的type叫做_doc,而在_doc中可以随意放置数据,无需按照固定格式。它会自动映射之前未出现过的字段。

例如,无需定义index也无需定义_doc,只需发送PUT请求发送JSON数据,就能成功保存。它将count自动映射为数字类型。使用curl -X GET "localhost:9200/data?pretty"命令可以看到mapping属性。之后,这个字段只能是数字,否则会报错。

自动映射文档类型方便测试,但要将它写进代码,还是应该定义index的文档类型,即ES中的mapping。mapping是文档字段的类型映射,下面的命令可以生成相应mapping的index,并设置"dynamic":false规定不能动态生成mapping。虽然数据可以保存,但mapping不会发生变化。

记录一下,创建索引只能使用PUT,而创建数据可以使用POST自动生成ID(新增),而PUT创建数据必须指定ID(更新)。

新的一天开始了,我使用Docker安装了新版本的Elasticsearch和Kibana,并顺利启动。我决定再次使用Kibana,因为它更方便一些。我需要手动编写一些代码。

mapping可以直接修改,注意路径和参数的变化。

那么,mapping具体如何使用呢?它实际上定义了字段名与类型的映射关系,字段名是开发者自己定义的,如name、age等,而类型是ES规定的。我了解到有二三十个类型,如keyword、数字类型等。

以下是一些常见的类型:

keyword可以用于排序、聚合和term-level查询。排序和聚合功能非常强大。term-level查询可以简单理解为相等的数据,不一定是完全相等,与text的match查询相对应。

text类型的数据会被分词器分词,然后可以根据单个词匹配包含该词语的文档。建议存储那些非结构化的但人类可读的数据,如邮件内容、产品描述等。

通常情况下,如果你既想要排序和聚合,又想要分词查询,那么应该将同一个内容放在两个字段上。

mapping映射除了属性的类型外,还包括属性上的配置。例如,analyzer分词器、文档提示等。除了选择合适的分词器插件外,在上线之前要详细测试分词器的分词效果。还有boost相关性分数计算的系数等。尽管功能很多,配置很多,但直接上手并不复杂。

Elasticsearch还支持别名,即为index或属性另外起一个名字。具体用途还不清楚。

接下来,我将介绍Elasticsearch的查询功能,这是关键所在,因为使用Elasticsearch就是用来检索数据的。

首先是查询语法,它既支持GET也支持POST,非常灵活。参数可以拼在URL中,也可以放在请求体中。内容很多,但我认为学习POST请求就足够了,因为有些复杂的查询参数很多,放在body中更易于阅读。

查询操作除了根据字段查询响应的数据外,还支持聚合、分页、排序和异步查询。接下来,我会整理这些内容。

关于查询,还有许多特性,如过滤查询、高亮查询等。以下是一个示例:

创建一个index并插入一条数据,然后:

以下是一个更复杂的示例:

Elasticsearch使用Query DSL来配置查询条件,DSL是domain specific language的缩写,只需知道这玩意是基于JSON来配置查询条件即可。

我已经编写了一些示例来熟悉Query DSL。

内容太多,看一些关键的吧?

官网有一些建议,第一个是Elasticsearch是一个搜索引擎,擅长搜索最符合条件的文档,不建议查询所有文档,而且文档不建议太大,默认的http传输*为100M,虽然可以调整。

等等,还有更多内容,接下来我将学习如何在项目中使用Elasticsearch,这对于开发者来说是最关键的。

Elasticsearch提供了一个专门的Java客户端,用于连接ES服务器。

首先,我需要添加依赖项。

以下是一个示例代码:

然后,我与Spring进行整合。

Spring还提供了一个实体类与index的映射,使用注解,例如:

到这里,基本上就可以使用了。要想熟练掌握,肯定需要去实践。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Hive笔记 Hive-元数据 英语low是什么意思 Low low 的是什么意思? 如何打开电脑设置的打印机电脑打印设置在哪里打开 使用电脑打印机怎么设置打印机和电脑怎样连接该如何设置 win10打印机设置在哪里 win10打印机设置方法介绍 怎么在电脑上设置打印机在电脑上怎么找打印机设置 怎样为电脑设置打印机电脑里打印机设置在哪 电脑打印机在哪里设置电脑上的打印机在哪里 初中没有学好文化基础想了解 湖南汽修学校怎么样? I9220开机后变砖了,开机后只要一动屏幕就定在那了,不能动。 三星i9220 运行软件黑屏 有声音怎么回事 干燥综合征患者如何治疗 干燥综合征怎么根治 干燥综合征的早期治疗方法 天猫收单礼金规则是首单有时限、可以和其他券叠加使用、付款再退款是... 天猫赔付红包使用规则? 浦发银行刷卡机最多一次可以转多少钱 MySQLpas数据库简介及应用场景分析mysqlpas数据库 MySQL多实例的灵活应用与管理技巧mysql不同的实例 MySQL三种用户及其特点简介mysql三种用户 MySQL中多用户管理mysql中不同的用户 很多人对腰十分不友好,有哪些伤害腰的错误习惯? 男人为什么喜欢摸女人的腰 现代新工天珠有能量吗? 关于稀有气体 氩气新天地的产生 分子结构价层电子对互斥理论 稀有气体及其化合物学习笔记 全网最全EdgeMesh Q&A手册 玩游戏对学习的影响有多大? SpringCloudGateway快速上手实现API聚合及自定义过滤器 手机游戏对学习的影响? 我用的是网件的NetGear JWNR 2000 路由器,目前发现有时会出现LAN口指示... 微信朋友圈怎么看对方屏蔽了自己吗? 血罗多肉怎么养 血罗多肉养殖方法 为什么网件 JWNR2000 300M 无线宽带路由器在设置连接无线网是只显示下图... 办理公司营业执照需要准备什么资料? 进账单盖什么章 开转帐支票给报关公司,请问填写进帐单后要加盖本公司的章吗_百度... 经费申请报告格式要求及内容 公文写作格式要求及常见错误 网癔症什么叫网络成瘾 ...究竟怎样才算是有网瘾?我有时会一次上五六小时算吗? 征集淘宝店铺名称。主要销售各种果酱(草莓酱、蓝莓酱、芒果酱等)名称要... 淘宝♀草莓小镇♂手绘店怎么样 ...结果交成了城乡居民社会养老保险300元可以退吗?支付宝 金刚砂和环氧地坪漆的区别 泰山币一卷多少个