搜索引擎在每个人的日常生活和工作中扮演着重要的角色。说到搜索,大多数人都会想到百度、谷歌、必应等搜索引擎。这些确实是PC互联网时代的搜索先行者,但是现在移动互联网时代的搜索已经非常流行了,各大应用基本上都支持搜索,比如抖音、微信、知乎等,都建好了-在搜索引擎中实现对自己内容的搜索。Elasticsearch是一个实时的分布式搜索分析引擎,具有前所未有的搜索速度和规模。我们只需要按照指定的索引格式存储数据,后面就可以进行极限搜索,所以Elasticsearch在各大互联网公司都有广泛的应用。据Elasticsearch官方介绍,Wikipedia、Github、StackOverflow等各大公司都在使用它。维基百科使用Elasticsearch提供带有突出显示片段的全文搜索,以及“输入即搜索”和“你的意思是不是”建议。Guardian使用Elasticsearch将社交数据整合到访问者日志中,为其编辑提供有关新文章的实时公开反馈。StackOverflow将地理位置查询集成到全文搜索中,并使用more-like-this界面来查找相关问题和答案。GitHub使用Elasticsearch查询了1300亿行代码。安装和使用Elasticsearch提供开箱即用的功能。我们从官网https://www.elastic.co/downloads/elasticsearch下载最新的和自己电脑系统匹配的稳定版,然后解压后执行。/bin/elasticsearchdisplaysuccessfully表示启动成功,然后执行命令curl'http://localhost:9200/?pretty'可以看到如下输出,表示本地Elasticsearch启动成功。在使用Elasticsearch之前,先简单介绍一下Elasticsearch的一种存储结构,方便我们后面的学习。首先,我们需要知道一件事,Elasticsearch是面向文档的。所谓文件就是文件。如果您使用过MongoDB,那么您应该熟悉该文档。它是NoSQL的形式,可以理解为JSON形式的结构。我们常用的MySQL关系结构是不同的。目前基本上任何语言对象都可以直接转成JSON形式,极大的方便了我们的使用。文档的形式文档的组成由文档数据和元数据组成,其中元数据包括_index、_type、_id三个特别重要的元数据,其中_index表示文档存放的位置,_type表示文档的对象类别,和_id文档的唯一标识。Elasticsearch虽然是以文档的形式存储的,但是这里我们可以用关系型数据库来类比。比如这里的_index可以类似于MySQL数据库,_type类似于MySQL表,_id类似于ID字段。与Elasticsearch交互通过官方文档,我们可以知道一个Elasticsearch请求的组成部分和任何HTTP请求都是一样的:curl-X'://:/?'-d''<>标记的部分含义如下:Tag含义VERB适当的HTTP方法或动词:GET、POST、PUT、HEAD或DELETE。PROTOCOLhttp或https(如果您在Elasticsearch前面有https代理)HOSTElasticsearch集群中任何节点的主机名,或本地机器上节点的localhost。PORTElasticsearchHTTP服务运行的端口号,默认为9200。PATHAPI的终端路径(例如,_count将返回集群中的文档数)。路径可能包含多个组件,例如:_cluster/stats和_nodes/stats/jvm。QUERY_STRING任何可选的查询字符串参数(例如?pretty将格式化JSON返回值以使其更易于阅读)BODYJSON格式的请求正文(如果请求需要)示例查看Elasticsearch集群中的文档数:curl-XGET'http://localhost:9200/_count?pretty'-H'Content-Type:application/json'-d'"query":{"match_all":{}}'返回如下,其中count为0,说明我们的集群还没有文档:索引文档传递了我们上面提到的内容,这里我们尝试索引一个文档,语句如下,然后查询文档的数据,结果如下curl-XPUT'http:///localhost:9200/student/class1/1?pretty'-H'Content-Type:application/json'-d'{"name":"ziyou","age":"18","date":"2021/12/19"}'这里我们通过学生索引class1的类型索引一个id为1的学生,使用pretty参数返回美化视图。通过上面的操作,现在我们的Elasticsearch集群中有一个id为1的学生不见了。查询完文档索引文档,我们可以根据下面的语句获取文档curl-XGET'http://localhost:9200/student/class1/1?pretty'更新文档我们可以通过前面的PUT再次执行文档语句更新,如下curl-XPUT'http://localhost:9200/student/class1/1?pretty'-H'Content-Type:application/json'-d'{"name":"ziyou","age":"20","date":"2021/12/19"}解释:可以看到age字段改了,不过这里我们还看到多了一个version字段,正常应该是2,阿粉而已多做了几次,所以这里是7。需要注意的是,更新文档并不是更新原始文档。Elasticsearch底层帮我们把原来的文档标记为已删除,然后新建一个带有版本号的文档,因为文档ID没有变。.随着我们索引的数据越来越多,Elasticsearch底层会帮我们清理这些被删除的文档数据。从我们的角度来看,该文件已经更新。删除文档curl-XDELETE'http://localhost:9200/student/class1/1通过DELETE命令,我们可以删除文档。删除与更新相同,只是标记为已删除,不会立即从磁盘中删除,随着它继续索引更多数据,Elasticsearch将在后台清理标记为已删除的文档。同时删除时,version版本也会增加。
