Py学习  »  Elasticsearch

ElasticSearch入门基本概念

缘来是你ylh • 5 年前 • 152 次点击  

基于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,值和查询字符串用:隔开

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31080
 
152 次点击