技术标签: elasticsearch mysql mongodb 数据挖掘
ES 的数据组织概念和 MySQL 和 MongoDB 对比如下:("最受欢迎"的依据)
注意这里 ES的Index的概念类似于MySQL的数据库,在后文中容易造成混淆。
更加值得注意的是:因为如下各方面原因,在ES6之后,一个Index不在允许存在多个type,在 Elasticsearch 7版本中,已经将 type 去掉了,但是为了兼容老格式,会将 _doc 或自己命名的type作为一个唯一的 type,8.x将彻底不支持type。
我们经常把二维数据库与ES作类比的方式是不正确的假设。把“index”类比为数据库,“type”类比为表。具体原因是,数据库的表是物理独立的,一个表的列跟另外一张表相同名称的列没有关系,而ES中并非如此,不同type映射类型中具有相同名称的字段在内部由相同的Lucene字段支持。
当您想要索引一个deleted字段在不同的type中数据类型不一样。一个类型中为日期字段,另外一个类型中为布尔字段时,这可能会导致ES的存储失败,因为这影响了ES的初衷设计。
另外,在一个index中建立很多实体,type,没有相同的字段,会导致数据稀疏,最终结果是干扰了Lucene有效压缩文档的能力,说白了就是影响ES的存储、检索效。
ES 的语法遵循 RESTfull 风格,PATH的资源结构为 /[index]/[type]/[document]
PUT /index_name
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"}
}
}
}
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
DELETE /index_name
PUT /index_name/_alias/my_alias
一个索引可以有多个别名,一个别名也可以作用在多个索引上,索引别名可用于平滑迁移, 推荐项目中使用索引别名而不是直接使用索引名。
应用索引别名可以较为方便地实现平滑迁移,推荐使用。
你可以使用简单的 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
}
GET /customer/_doc/1
将返回这个文档本身
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 26,
"_primary_term" : 4,
"found" : true,
"_source" : {
"name": "John Doe"
}
}
一旦你开始在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"}
}, ...
]
}
}
文章浏览阅读1.2w次,点赞2次,收藏4次。1.如果是在函数外面定义一个枚举类型的变量,那么这个枚举变量就会自动初始化为0。枚举类型其实也应该算是内置类型,她就是一个整型类型。其实这块:全局变量和静态类型变量没有初始化的话也会自动初始化为0或空字符。enum x{x1 = 3,x2,x3,} ;x X;int main(){ cout getchar(); return_枚举变量初始化
文章浏览阅读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公式推导
文章浏览阅读152次。程序员(ID:imkuqin)猿妹编译 原文:https://projectfailures.wordpress.com最近有个史称世界上最烂的开发..._开发12年的项目4
文章浏览阅读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怎么写
文章浏览阅读3.9k次,点赞5次,收藏29次。【蓝桥杯单片机进阶强化-05】超声波测距内容学习来自小蜜蜂老师一、超声波测距原理超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。二、计算公式距离 = 声速 × 发出超声波到接收返回的时间/2因为超声波在空气中的传播速度受温度影响。声波在空气中的传播速度与温度的关系是:在20摄氏度时,声速V = 332 + 0.607t (m/s)利用超声波进行距离测量,要求精度一般都不高,取2_超声波测距公式
文章浏览阅读5.1k次。最近在调试一个项目有一百多个管脚,而且上面还有接插件,ZYNQ是通过接插件插在底板上,对管脚特别的麻烦,于是想到了一个简单的方法:首先在网上搜了一个“Altium Designer中将FPGA引脚定义导出成文件”的方法:这里有原文链接:https://www.cnblogs.com/xianfei-li/p/5339183.html选中FPGA的其中一个Part;右键–>Par..._ad软件能导出芯片的引脚吗
文章浏览阅读244次。今天本来想放一张图片在这个文档上面的,但是这个网站提示我Upload文件夹没有写入的权限,暂且留到后面弥补吧。 目前我们队伍的当前区域排名是60名,成绩为50.42分,看着还不错的样子,实际上我们一点点算法都没有用,完全是用测试用例上交的代码。哈哈,永远得出的是最快的,但求出的方案永远是费用..._codecraft
文章浏览阅读942次。1.使用定位居中给包裹图片的div一个相对定位 position: relative;给图片一个绝对定位 position: absolute; 并通过使用 top: 50%; transform: translateY(-50%); 来调节图片的位置,让图片展示在div盒子竖直边上的中间,即在竖直方向上居中。<!DOCTYPE html><html lang="en"><head>_div背景图垂直居中
文章浏览阅读60次。本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权!题目描述 Description水果姐第二天心情也很不错,又来逛水果街。突然,cgh...
文章浏览阅读1.4k次。仿钉钉 集成&自动化 流程设计器demo_仿钉钉流程设计器
文章浏览阅读1.2k次。论文主要内容论文参考文献电子商务推荐算法的挑战:数据量大需要高质量实时推荐新用户冷启动问题(同时,客户数据也不稳定)三种常用解决方法:传统的协同过滤聚类模型基于搜索的方法文章提出:商品到商品的协同过滤(Item-to-Item Collaborative Filter)传统的协同过滤将客户表示为商品的N维向量,其中N是不同目录下商品的数量。购买或肯定评级的商品,向..._推荐 item对item
文章浏览阅读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