返回结果如下:
{ "_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里面所有的文档,运行命令如下:
返回结果包括了所有四个文档,放在数组 hits 中。
当然,Elasticsearch 提供更加丰富灵活的查询语言叫做 查询表达式 , 它支持构建更加复杂和健壮的查询。利用查询表达式,我们可以检索出conference中event里面所有host为Bob的文档,命令如下:
返回的结果只包括了一个文档,放在数组 hits 中。
接着,让我们尝试稍微高级点儿的全文搜索——一项传统数据库确实很难搞定的任务。搜索下所有description中含有"use Elasticsearch"的event:
返回的结果(部分)如下:
{ ... "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,可以使用下面的命令:
这时候返回的结果只有一个文档,就是上面输出的第二个文档。
当然,Elasticsearch还支持更多的搜索功能,比如过滤器,高亮搜索,结构化搜索等,希望接下来能有更多的时间和经历来介绍~
后续有机会再介绍如何利用Python来操作Elasticsearch~
本次分享到此结束,感谢大家阅读~
注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~