ElasticSearch入门基本概念

作者: 缘来是你ylh | 来源:发表于2019-03-30 00:34 被阅读6次

    基于HTTP协议,以JSON为数据交互格式的RESTful API

    其他所有程序语言都可以使用RESTful API,通过9200端口的与Elasticsearch进行通信,你可以使用你喜欢的WEB客户端,事实上,如你所见,你甚至可以通过curl命令与Elasticsearch通信。

    curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
    
    • VERB HTTP方法:GET, POST, PUT, HEAD,DELETE
    • PROTOCOL http或者https协议(只有在Elasticsearch前面有https代理的时候可用)
    • HOST Elasticsearch集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫localhost
    • PORT Elasticsearch HTTP服务所在的端口,默认为9200
    • PATH API路径(例如_count将返回集群中文档的数量),PATH可以包含多个组件,例如_cluster/stats或者_nodes/stats/jvm
    • QUERY_STRING一些可选的查询请求参数,例如?pretty参数将使请求返回更加美观易读的JSON数据
    • BODY 一个JSON格式的请求主体(如果请求需要的话)

    面向文档

    Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同,这也是Elasticsearch能够执行复杂的全文搜索的原因之一。

    JSON

    ELasticsearch使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。它简洁、简单且容易阅读。

    概念对比

    关系型数据库 ElasticSearch 备注说明 Relational DB / ES
    Databases Indices(Indexes) 数据库/索引
    Tables Types 表 / 类型
    Rows Documents 记录 / 文档
    Columns Fields 列 / 字段

    测试

    PUT /megacorp/employee/1
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }
    

    我们看到path: /megacorp/employee/1包含三部分信息:

    名字 说明
    megacorp 索引名
    employee 类型名
    1 这个员工的ID

    在ES中PUT和POST都会覆盖原来的数据,没有就会更新

    检索文档

    http://localhost:9200/megacorp/employee/1
    

    结果

    {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_version": 1,
        "_seq_no": 0,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "first_name": "John",
            "last_name": "Smith",
            "age": 25,
            "about": "I love to go rock climbing",
            "interests": [
                "sports",
                "music"
            ]
        }
    }
    

    检索所有员工

    http://localhost:9200/megacorp/employee/_search
    

    这个会返回所有员工的信息,默认展示20条文档

    加入检索条件

    http://localhost:9200/megacorp/employee/_search?q=first_name:sheng
    

    返回结果

    {
        "took": 5,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": 1,
            "max_score": 0.6931472,
            "hits": [
                {
                    "_index": "megacorp",
                    "_type": "employee",
                    "_id": "4",
                    "_score": 0.6931472,
                    "_source": {
                        "first_name": "sheng",
                        "last_name": "yulong",
                        "age": 28,
                        "about": "This is for everyone!",
                        "interests": [
                            "music"
                        ]
                    }
                }
            ]
        }
    }
    

    查询字符串 传递给参数q,值和查询字符串用:隔开

    那么如果有更加复杂的搜索呢,怎么操作呢?我们下回分解。

    相关文章

      网友评论

        本文标题:ElasticSearch入门基本概念

        本文链接:https://www.haomeiwen.com/subject/odhtbqtx.html