Elasticsearch简介与实战 (3)

返回结果如下:

{ "_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), 欢迎大家关注哦~~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppwwg.html