• 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
  • 相关阅读:
    MS SQL Sever数据库还原
    IIS 7.5 配置伪静态
    黑马程序员-out和ref
    黑马程序员-结构
    黑马程序员-ReadInt
    黑马程序员-hashtable
    黑马程序员-冒泡排序
    黑马程序员-快速排序
    黑马程序员-for和foreach
    黑马程序员-集合和索引器
  • 原文地址:https://www.cnblogs.com/mapel1594184/p/14524937.html
Copyright © 2020-2023  润新知