es数据结构都有哪些?有什么用处?

TheDisguiser 2020-04-28 22:33:02 java常见问答 6571

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常见问答更多知识请关注我们了解吧。