ES elasticsearch 从入门到放弃-语法和协议_elasticsearch 协议-程序员宅基地

技术标签: elasticsearch  mysql  mongodb  数据挖掘  

1 ES 数据组织概念

ES 的数据组织概念和 MySQL 和 MongoDB 对比如下:("最受欢迎"的依据

在这里插入图片描述
注意这里 ES的Index的概念类似于MySQL的数据库,在后文中容易造成混淆。

更加值得注意的是:因为如下各方面原因,在ES6之后,一个Index不在允许存在多个type,在 Elasticsearch 7版本中,已经将 type 去掉了,但是为了兼容老格式,会将 _doc 或自己命名的type作为一个唯一的 type8.x将彻底不支持type

  1. 我们经常把二维数据库与ES作类比的方式是不正确的假设。把“index”类比为数据库,“type”类比为表。具体原因是,数据库的表是物理独立的,一个表的列跟另外一张表相同名称的列没有关系,而ES中并非如此,不同type映射类型中具有相同名称的字段在内部由相同的Lucene字段支持。

  2. 当您想要索引一个deleted字段在不同的type中数据类型不一样。一个类型中为日期字段,另外一个类型中为布尔字段时,这可能会导致ES的存储失败,因为这影响了ES的初衷设计。

  3. 另外,在一个index中建立很多实体,type,没有相同的字段,会导致数据稀疏,最终结果是干扰了Lucene有效压缩文档的能力,说白了就是影响ES的存储、检索效。

2 索引的管理

ES 的语法遵循 RESTfull 风格,PATH的资源结构为 /[index]/[type]/[document]

  1. 最简单地创建索引,会采用默认配置
PUT /index_name
  1. 创建索引并指定一些配置
PUT /index_name
{
    
  "settings": {
     // settings
    "number_of_shards": 10,  // 分片数目
    "number_of_replicas": 1, // 每个分片副本数目
    "refresh_interval": "1s" // 数据落盘刷新频率
  },
  "mappings": {
      // mapping, 定义数据 schema,下面定义了5个字段,
    "properties": {
     // 除了type, 每个字段有更多的属性可选,这里不展开介绍
      "uid": {
     "type": "long" },
      "phone": {
    "type": "long"},
      "message": {
    "type": "keyword"},
      "msgcode": {
    "type": "long"},
      "sendtime": {
    "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss"}
    }
  }
}
  1. 索引的 mapping 是可以根据数据自动更新的,如不创建索引直接插入如下数据
POST /index_name/_doc/1
{
    
    "first_name" : "Tim2",
    "last_name" :  "Wang",
    "age" :        26,
    "about" :      "go go go golang",
    "interests": [ "golang", "world peace" ],
    "hasomer": "gugu"
}

推荐的做法是:事先定义好索引的Schema,也就是创建索引并制定好Mapping,并关闭 Dynamic Mapping 特性。

PUT /index_name/_mapping/data
{
    
  "dynamic":false
}

或者

PUT /index_name/_mapping/data
{
    
  "dynamic":"strict"
}

后者比前者的限制更为严格一些,当文档存在Mapping里没有的field时,前者仍可插入,只是不再为新字段建立索引提供搜索。后者直接不允许插入。

也可以在elasticsearch.yml配置文件关闭 Dynamic Mapping.

action.auto_create_index: false
index.mapper.dynamic: false
  1. 删除索引
DELETE /index_name
  1. 设置索引别名
PUT /index_name/_alias/my_alias

一个索引可以有多个别名,一个别名也可以作用在多个索引上,索引别名可用于平滑迁移, 推荐项目中使用索引别名而不是直接使用索引名。

应用索引别名可以较为方便地实现平滑迁移,推荐使用。

3 数据的CRUD

3.1 插入数据

你可以使用简单的 PUT 请求去执行操作,请求须指定文档的索引名称,唯一的文档 ID,以及请求体中一个或多个键值对。

PUT /customer/_doc/1
{
    
  "name": "John Doe"
}

这个请求(如不存在)将自动创建一个 ID 为 1 的新文档,并储存键值对,并为其建立索引。
由于这是一个新文档,返回的结果显示新创建的文档版本号为 1。

{
    
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 26,
  "_primary_term" : 4
}

3.2 简单查询数据

GET /customer/_doc/1

将返回这个文档本身

{
    
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 26,
  "_primary_term" : 4,
  "found" : true,
  "_source" : {
    
    "name": "John Doe"
  }
}

3.3 搜索数据

一旦你开始在Elasticsearch 插入数据,你就可以通过_search方式发送请求来进行搜索,如果使用匹配搜索功能,在请求体中使用 Elasticsearch Query DSL 指定搜索条件。你也可以在请求头指定要搜索的索引名称。

如下,搜索银行索引中,所有账号按照 account_number排序

GET /bank/_search
{
    
  "query": {
     "match_all": {
    } },
  "sort": [
    {
     "account_number": "asc" }
  ]
}

默认情况会返回符合条件的前十个结果

{
    
  "took" : 63,
  "timed_out" : false,
  "_shards" : {
    
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    
    "total" : {
    
        "value": 1000,
        "relation": "eq"
    },
    "max_score" : null,
    "hits" : [ {
    
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "0",
      "sort": [0],
      "_score" : null,
      "_source" : {
    "account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"[email protected]","city":"Hobucken","state":"CO"}
    }, {
    
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "1",
      "sort": [1],
      "_score" : null,
      "_source" : {
    "account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
    }, ...
    ]
  }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_34820292/article/details/118463026

智能推荐

枚举类型的初始化_枚举变量初始化-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏4次。1.如果是在函数外面定义一个枚举类型的变量,那么这个枚举变量就会自动初始化为0。枚举类型其实也应该算是内置类型,她就是一个整型类型。其实这块:全局变量和静态类型变量没有初始化的话也会自动初始化为0或空字符。enum x{x1 = 3,x2,x3,} ;x X;int main(){ cout getchar(); return_枚举变量初始化

递归6.递归求1*1+2*2+3*3+……+n*n_1*1+2*2+3*3+.....n*n公式推导-程序员宅基地

文章浏览阅读8.6k次。问题及代码:2830: 递归求1*1+2*2+3*3+……+n*nTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 315 Solved: 226[Submit][Status][Web Board]Description定义一个递归函数sum,函数声明如下:int sum(int n); //_1*1+2*2+3*3+.....n*n公式推导

开发12年,整整6百万行代码,史上最烂的开发项目长这样-程序员宅基地

文章浏览阅读152次。程序员(ID:imkuqin)猿妹编译 原文:https://projectfailures.wordpress.com最近有个史称世界上最烂的开发..._开发12年的项目4

写测试Case的通常4步_测试case怎么写-程序员宅基地

文章浏览阅读3.9k次。• Setup: Establish the preconditions to the test. • Exercise: Do something to the system. • Verify: Check the expected outcome. • Cleanup: Return the system under test to its initial state af_测试case怎么写

【蓝桥杯单片机进阶强化-05】超声波测距_超声波测距公式-程序员宅基地

文章浏览阅读3.9k次,点赞5次,收藏29次。【蓝桥杯单片机进阶强化-05】超声波测距内容学习来自小蜜蜂老师一、超声波测距原理超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。二、计算公式距离 = 声速 × 发出超声波到接收返回的时间/2因为超声波在空气中的传播速度受温度影响。声波在空气中的传播速度与温度的关系是:在20摄氏度时,声速V = 332 + 0.607t (m/s)利用超声波进行距离测量,要求精度一般都不高,取2_超声波测距公式

Altium Designer原理图快速导出FPGA管脚的方法_ad软件能导出芯片的引脚吗-程序员宅基地

文章浏览阅读5.1k次。最近在调试一个项目有一百多个管脚,而且上面还有接插件,ZYNQ是通过接插件插在底板上,对管脚特别的麻烦,于是想到了一个简单的方法:首先在网上搜了一个“Altium Designer中将FPGA引脚定义导出成文件”的方法:这里有原文链接:https://www.cnblogs.com/xianfei-li/p/5339183.html选中FPGA的其中一个Part;右键–>Par..._ad软件能导出芯片的引脚吗

随便推点

CodeCraft第一步-程序员宅基地

文章浏览阅读244次。今天本来想放一张图片在这个文档上面的,但是这个网站提示我Upload文件夹没有写入的权限,暂且留到后面弥补吧。 目前我们队伍的当前区域排名是60名,成绩为50.42分,看着还不错的样子,实际上我们一点点算法都没有用,完全是用测试用例上交的代码。哈哈,永远得出的是最快的,但求出的方案永远是费用..._codecraft

设置图片在div盒子里竖直方向上的居中_div背景图垂直居中-程序员宅基地

文章浏览阅读942次。1.使用定位居中给包裹图片的div一个相对定位 position: relative;给图片一个绝对定位 position: absolute; 并通过使用 top: 50%; transform: translateY(-50%); 来调节图片的位置,让图片展示在div盒子竖直边上的中间,即在竖直方向上居中。<!DOCTYPE html><html lang="en"><head>_div背景图垂直居中

codevs3305 水果姐逛水果街Ⅱ-程序员宅基地

文章浏览阅读60次。本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权!题目描述 Description水果姐第二天心情也很不错,又来逛水果街。突然,cgh...

仿钉钉 集成&自动化 流程设计器demo_仿钉钉流程设计器-程序员宅基地

文章浏览阅读1.4k次。仿钉钉 集成&自动化 流程设计器demo_仿钉钉流程设计器

【论文阅读】推荐算法-Recommendations Item-to-Item Collaborative Filtering_推荐 item对item-程序员宅基地

文章浏览阅读1.2k次。论文主要内容论文参考文献电子商务推荐算法的挑战:数据量大需要高质量实时推荐新用户冷启动问题(同时,客户数据也不稳定)三种常用解决方法:传统的协同过滤聚类模型基于搜索的方法文章提出:商品到商品的协同过滤(Item-to-Item Collaborative Filter)传统的协同过滤将客户表示为商品的N维向量,其中N是不同目录下商品的数量。购买或肯定评级的商品,向..._推荐 item对item

Linux centos7 DHCP服务环境部署_centop hlds-程序员宅基地

文章浏览阅读283次。在末行模式下输入”r /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example” 回车,获取dhcp配置模板,版本号可自行使用tab补全。//动态分配的地址范围。//DNS服务器地址。//配置DHCP和DNS为动态更新,default-lease-time 600;配置文件位于 /etc/dhcp 目录下 的 dhcpd.conf。_centop hlds

推荐文章

热门文章

相关标签