ES小伙伴们知道吗?这是一个高可用,可扩展的开源分布式搜索引擎,今天我们就来了解如何实现返回它的数据结构,一起来看看吧。
ES即简单又复杂,你可以用它快速的实现全文检索,又需要了解复杂的REST
API。为了更好的使用和理解ES数据结构,我们就以下面这些例子来了解它吧。
首先开启你的ES,然后执行下面的命令,windows下需要自己安装curl、也可以使用cygwin模拟curl命令:
curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
注意:
1 需要在accounts.json所在的目录运行curl命令。
2 localhost:9200是ES得访问地址和端口
3 bank是索引的名称
4 account是类型的名称
5 索引和类型的名称在文件中如果有定义,可以省略;如果没有则必须要指定
6 _bulk是rest得命令,可以批量执行多个操作(操作是在json文件中定义的,原理可以参考之前的翻译)
7 pretty是将返回的信息以可读的JSON形式返回。
执行完上述的命令后,可以通过下面的命令查询:
curl 'localhost:9200/_cat/indices?v' health index pri rep docs.count docs.deleted store.size pri.store.size yellow bank 5 1 1000 0 424.4 kb 424.4 kb
搜索API
ES提供了两种搜索的方式:请求参数方式 和 请求体方式。
请求参数方式
curl 'localhost:9200/bank/_search?q=*&pretty'
其中bank是查询的索引名称,q后面跟着搜索的条件:q=*表示查询所有的内容
请求体方式(推荐这种方式)
curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "query": { "match_all": {} } }'
这种方式会把查询的内容放入body中,会造成一定的开销,但是易于理解。在平时练习中,建议使用这种方式。
返回的内容
{ "took": 26 , "timed_out": false , "_shards": { "total": 5 , "successful": 5 , "failed": 0 } , "hits": { "total": 1000 , "max_score": 1.0 , "hits": [ { "_index": "bank" , "_type": "account" , "_id": "1" , "_score": 1.0 , "_source": { "account_number": 1 , "balance": 39225 , "firstname": "Amber" , "lastname": "Duke" , "age": 32 , "gender": "M" , "address": "880 Holmes Lane" , "employer": "Pyrami" , "email": "amberduke@pyrami.com" , "city": "Brogan" , "state": "IL" } } , { "_index": "bank" , "_type": "account" , "_id": "6" , "_score": 1.0 , "_source": { "account_number": 6 , "balance": 5686 , "firstname": "Hattie" , "lastname": "Bond" , "age": 36 , "gender": "M" , "address": "671 Bristol Street" , "employer": "Netagy" , "email": "hattiebond@netagy.com" , "city": "Dante" , "state": "TN" } } , { "_index": "bank" , "_type": "account" , "_id": "13",
返回的内容如下:
took:是查询花费的时间,毫秒单位
time_out:标识查询是否超时
_shards:描述了查询分片的信息,查询了多少个分片、成功的分片数量、失败的分片数量等
hits:搜索的结果,total是全部的满足的文档数目,hits是返回的实际数目(默认是10)
_score是文档的分数信息,与排名相关度有关,参考各大搜索引擎的搜索结果,就容易理解。
由于ES是一次性返回所有的数据,因此理解返回的内容是很必要的。它不像传统的SQL是先返回数据的一个子集,再通过数据库端的游标不断的返回数据。
以上就是今天ES所有内容了,有关Java常见问答更多知识请关注我们了解吧。