ElasticSearch数据及其使用

引言


NoSql:主要指非关系型、分布式、不提供ACID的数据库设计模式。

1 ES总结

  • 主旨在于随时可用和按需扩容,通过购买性能更强大(垂直扩容、或纵向扩容)或者数量更多的服务器(水平扩容、或横向扩容)来实现。
  • 垂直扩容有限,真正的扩容能力来自于水平扩容(为集群增加更多的节点,将负载压力和稳定性分散到这些节点中)。
  • 天生就是分布式,通过管理节点来提高扩容性和可用性。

1.1 功能

全文检索、结构化搜索、分析

1.2 数据的输入和输出

1.2.1 ES是分布式的文档存储
  • 一个对象是基于特定语言的内存的数据结构。为了通过网络发送或者存储它,我们需要将它变成某种标准的格式。
  • JSON是一种以人可读的文本表示对象的方法。它已经变成 NoSQL 世界交换数据的事实标准。当一个对象被序列化成为 JSON,它被称为一个 JSON 文档 。
  • ES中,每个字段的所有数据都是默认被索引的。 即每个字段都有为了快速检索设置的专用倒排索引。而且,不像其他多数的数据库,它能在 同一个查询中使用所有这些倒排索引,并以惊人的速度返回结果。
1.2.2 什么是文档
  • 字段的名字可以是任何合法的字符串,但 不可以包含英文句号( . )。
  • 一个键可以是一个字段或者字段的名称,一个值可以为任意对象。
{
    "name":         "John Smith",
    "age":          42,
    "confirmed":    true,
    "join_date":    "2014-06-01",
    "home": {
        "lat":      51.5,
        "lon":      0.1
    },
    "accounts": [
        {
            "type": "facebook",
            "id":   "johnsmith"
        },
        {
            "type": "twitter",
            "id":   "johnsmith"
        }
    ]
}
  • 在 Elasticsearch 中,术语文档有着特定的含义。它是指最顶层或者根对象, 这个根对象被序列化成 JSON 并存储到 Elasticsearch 中,指定了唯一 ID。
1.2.3 文档元数据
  • _index

文档在哪存放

一个索引名必须小写,不能以下划线开头,不能包含逗号。

  • _type

文档表示的对象类别

一个 _type 命名可以是大写或者小写,但是不能以下划线或者句号开头,不应该包含逗号, 并且长度限制为256个字符。

  • _id

文档唯一标识

ID 是一个字符串,当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch 中的一个文档。 当创建一个新的文档,要么提供自己的 _id ,要么让 Elasticsearch 帮你生成。

1.2.4 索引文档
  • 使用自定义id
# 索引请求格式
--------------------------------------------------------------

PUT /{index}/{type}/{id}
{
  "field": "value",
  ...
}
    
--------------------------------------------------------------
    
PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "Just trying this out...",
  "date":  "2014/01/01"
}

# 响应体
--------------------------------------------------------------

{
   "_index":    "website",
   "_type":     "blog",
   "_id":       "123",
   "_version":  1,
   "created":   true
}
  • ES帮我们生成
# 索引请求格式
--------------------------------------------------------------

POST /{index}/{type}/{id}
{
  "field": "value",
  ...
}
    
--------------------------------------------------------------
    
POST /website/blog/
{
  "title": "My second blog entry",
  "text":  "Still trying this out...",
  "date":  "2014/01/01"
}

# 响应体
--------------------------------------------------------------

{
   "_index":    "website",
   "_type":     "blog",
   "_id":       "AVFgSgVHUP18jI2wRx0w",
   "_version":  1,
   "created":   true
}

'''
自动生成的 ID 是 URL-safe、 基于 Base64 编码且长度为20个字符的 GUID 字符串。 这些 GUID 字符串由可修改的 FlakeID 模式生成,这种模式允许多个节点并行生成唯一 ID ,且互相之间的冲突概率几乎为零。
'''
1.2.5 取回一个文档
  • 为了从 Elasticsearch 中检索出文档,我们仍然使用相同的 _index , _type , 和 _id ,但是 HTTP 谓词更改为 GET
GET /website/blog/123?pretty
  • 响应体
{
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 1,
  "found" :    true,
  "_source" :  {
      "title": "My first blog entry",
      "text":  "Just trying this out...",
      "date":  "2014/01/01"
  }
}
  • GET 请求的响应体包括 {"found": true} ,这证实了文档已经被找到。 如果我们请求一个不存在的文档,我们仍旧会得到一个 JSON 响应体,但是 found 将会是 false 。 此外, HTTP 响应码将会是 404 Not Found ,而不是 200 OK
posted @ 2021-03-12 16:53  狐狸大大爱吃糖  阅读(182)  评论(0编辑  收藏  举报