2023年6月29日发(作者:)
Elasticsearch简介与实战什么是Elasticsearch? Elasticsearch是⼀个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。 Lucene 可以说是当下最先进、⾼性能、全功能的搜索引擎库——⽆论是开源还是私有,但它也仅仅只是⼀个库。为了充分发挥其功能,你需要使⽤ Java 并将 Lucene 直接集成到应⽤程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其⼯作原理,因为Lucene ⾮常复杂。 为了解决Lucene使⽤时的繁复性,于是Elasticsearch便应运⽽⽣。它使⽤ Java 编写,内部采⽤ Lucene 做索引与搜索,但是它的⽬标是使全⽂检索变得更简单,简单来说,就是对Lucene 做了⼀层封装,它提供了⼀套简单⼀致的 RESTful API 来帮助我们实现存储和检索。 当然,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是⼀个全⽂搜索引擎。 它可以被下⾯这样准确地形容:⼀个分布式的实时⽂档存储,每个字段可以被索引与搜索;⼀个分布式实时分析搜索引擎;能胜任上百个服务节点的扩展,并⽀持 PB 级别的结构化或者⾮结构化数据。由于Elasticsearch的功能强⼤和使⽤简单,维基百科、卫报、Stack Overflow、GitHub等都纷纷采⽤它来做搜索。现在,Elasticsearch已成为全⽂搜索领域的主流软件之⼀。 下⾯将介绍Elasticsearch的安装与简单使⽤。安装并运⾏Elasticsearch 安装 Elasticsearch 之前,你需要先安装⼀个较新版本的 Java,最好的选择是,你可以从
获得官⽅提供的最新版本的Java。 你可以从 elastic 的官⽹
/downloads/elasticsearch 获取最新版本的Elasticsearch。解压⽂档后,按照下⾯的操作,即可在前台(foregroud)启动 Elasticsearch:cd elasticsearch-
9200 和 Elasticsearch 进⾏通信,你可以⽤你最喜爱的 web 客户端访问 Elasticsearch 。甚⾄,你还可以使⽤
curl 命令来和Elasticsearch 交互。 ⼀个Elasticsearch请求和任何 HTTP 请求⼀样,都由若⼲相同的部件组成:curl -X
< > 标记的部件:部件VERBPROTOCOLHOSTPORTPATHQUERY_STRINGBODY说明适当的 HTTP
⽅法 或
谓词 :
GET、
POST、
PUT、
HEAD 或者
DELETE。http 或者
https(如果你在 Elasticsearch 前⾯有⼀个
https 代理)Elasticsearch 集群中任意节点的主机名,或者⽤
localhost 代表本地机器上的节点。运⾏ Elasticsearch HTTP 服务的端⼝号,默认是
9200 。API 的终端路径(例如
_count 将返回集群中⽂档数量)。Path 可能包含多个组件,例如:_cluster/stats 和
_nodes/stats/jvm 。任意可选的查询字符串参数 (例如
pretty 将格式化地输出 JSON 返回值,使其更容易阅读)⼀个 JSON 格式的请求体 (如果请求需要的话)对于HTTP⽅法,它们的具体作⽤为:HTTP⽅法GETPOSTPUTDELETEHEAD获取请求对象的当前状态改变对象的当前状态创建⼀个对象销毁对象请求获取对象的基础信息说明 我们以下⾯的数据为例,来展⽰Elasticsearch的⽤法。以下全部的操作都在Kibana中完成,创建的index为conference, type为event .插⼊数据 ⾸先创建index为conference, 创建type为event, 插⼊id为1的第⼀条数据,只需运⾏下⾯命令就⾏:PUT /conference/event/1{ "host": "Dave", "title": "Elasticsearch at Rangespan and Exonar", "description": "Representatives from Rangespan and Exonar will come and discuss how they use Elasticsearch", "attendees": ["Dave", "Andrew", "David", "Clint"], "date": "2013-06-24T18:30", "reviews": 3}在上⾯的命令中,路径/conference/event/1表⽰⽂档的index为conference, type为event, id为1. 类似于上⾯的操作,依次插⼊剩余的4条数据,完成插⼊后,查看数据如下:插⼊数据删除数据 ⽐如我们想要删除conference中event⾥⾯id为5的数据,只需运⾏下⾯命令即可:DELETE /conference/event/5返回结果如下:{ "_index" : "conference", "_type" : "event", "_id" : "5", "_version" : 2, "result" : "deleted", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1}表⽰该⽂档已成功删除。如果想删除整个event类型,可输⼊命令:DELETE /conference/event如果想删除整个conference索引,可输⼊命令:DELETE /conference修改数据 修改数据的命令为POST, ⽐如我们想要将conference中event⾥⾯id为4的⽂档的作者改为Bob,那么需要运⾏命令如下:POST /conference/event/4/_update{ "doc": {"host": "Bob"}}返回的信息如下:(表⽰修改数据成功){ "_index" : "conference", "_type" : "event", "_id" : "4", "_version" : 7, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 7, "_primary_term" : 1}查看修改后的数据如下:修改数据查询数据 查询数据的命令为GET,查询命令也是Elasticsearch最为重要的功能之⼀。⽐如我们想查询conference中event⾥⾯id为1的数据,运⾏命令如下:GET /conference/event/1返回的结果如下:{ "_index" : "conference", "_type" : "event", "_id" : "1", "_version" : 2, "found" : true, "_source" : { "host" : "Dave", "title" : "Elasticsearch at Rangespan and Exonar", "description" : "Representatives from Rangespan and Exonar will come and discuss how they use Elasticsearch", "attendees" : [ "Dave", "Andrew", "David", "Clint" ], "date" : "2013-06-24T18:30", "reviews" : 3 }}在_source 属性中,内容是原始的 JSON ⽂档,还包含有其它属性,⽐如_index, _type, _id, _found等。 如果想要搜索conference中event⾥⾯所有的⽂档,运⾏命令如下:GET /conference/event/_search返回结果包括了所有四个⽂档,放在数组 hits 中。 当然,Elasticsearch 提供更加丰富灵活的查询语⾔叫做
查询表达式 , 它⽀持构建更加复杂和健壮的查询。利⽤查询表达式,我们可以检索出conference中event⾥⾯所有host为Bob的⽂档,命令如下:GET /conference/event/_search{ "query" : { "match" : { "host" : "Bob" } }}返回的结果只包括了⼀个⽂档,放在数组 hits 中。 接着,让我们尝试稍微⾼级点⼉的全⽂搜索——⼀项传统数据库确实很难搞定的任务。搜索下所有description中含有"use Elasticsearch"的event:GET /conference/event/_search{ "query" : { "match" : { "description" : "use Elasticsearch" } }}返回的结果(部分)如下:{ ... "hits" : { "total" : 2, "max_score" : 0.65109104, "hits" : [ { ... "_score" : 0.65109104, "_source" : { "host" : "Dave Nolan", "title" : "real-time Elasticsearch", "description" : "We will discuss using Elasticsearch to index data in real time", ... } }, { ... "_score" : 0.5753642, "_source" : { "host" : "Dave", "title" : "Elasticsearch at Rangespan and Exonar", "description" : "Representatives from Rangespan and Exonar will come and discuss how they use Elasticsearch", ... } } ] }}返回的结果包含了两个⽂档,放在数组 hits 中。让我们对这个结果做⼀些分析,第⼀个⽂档的description⾥⾯含有“using Elasticsearch”,这个能匹配“use Elasticsearch”是因为Elasticsearch含有内置的词⼲提取算法,之后两个⽂档按_score进⾏排序,_score字段表⽰⽂档的相似度(默认的相似度算法为BM25)。 如果想搜索下所有description中严格含有"use Elasticsearch"这个短语的event,可以使⽤下⾯的命令:GET /conference/event/_search{ "query" : { "match_phrase": { "description" : "use Elasticsearch" } }}这时候返回的结果只有⼀个⽂档,就是上⾯输出的第⼆个⽂档。 当然,Elasticsearch还⽀持更多的搜索功能,⽐如过滤器,⾼亮搜索,结构化搜索等,希望接下来能有更多的时间和经历来介绍~总结 后续有机会再介绍如何利⽤Python来操作Elasticsearch~ 本次分享到此结束,感谢⼤家阅读~注意:本⼈现已开通微信公众号: Python爬⾍与算法(微信号为:easy_web_scrape), 欢迎⼤家关注哦~~
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687987694a64201.html
评论列表(0条)