elasticsearch-dsl笔记
一、elasticsearch安装
安装java1.8以上
安装elasticsearch-rtf(https://github.com/medcl/elasticsearch-rtf)
head插件和kibana的安装
- head:A web front end for an elastic search cluster
Kibana:Kibana is a window into the Elastic Stack. It enables visual exploration and real-time analysis of your data in Elasticsearch
二、Elasticsearch学习
1. elasticsearch概念
- 集群
- 节点
- 分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片响应请求,提高性能和吞吐量
- 副本
2. elasticsearch与mysql概念对比
Elasticsearch |
Mysql |
Index(索引) |
数据库 |
Type(类型) |
表 |
Documents(文档) |
行 |
Fields |
列 |
3. 倒排索引
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
4. es的文档、索引的CRUD操作
- 索引初始化操作
- 指定分片和副本的数量
- shards一旦设置不能修改
PUT lagou
{
“settings”: {
“index”: {
“number_of_shards”: ,
“number_of_replicas”:
}
}
}
- 获取settings信息
GET lagou/_settings
GET _all/_settings
GET _settings
- 获取settings信息
- 更新settings信息
PUT lagou/_settings
{
“number_of_replicas”:
}
- 更新settings信息
- 获取索引信息
GET _all
GET lagou - 保存一个文档
PUT lagou/job/ --可以不指明id(不指明id,需用POST提交)
{
"title":"python分布式爬虫开发",
"salary_min":,
"city":"北京",
"company":{
"name":"百度",
"company_addr":"北京市软件园"
},
"publish_date":"2017-4-16",
"comments":
} - 获取文档
GET lagou/job/
GET lagou/job/?_source=title
GET lagou/job/?_source=title,city - 修改文档---覆盖方式
PUT lagou/job/
{
Xxx:yyy
} - 修改文档---增量修改方式
POST lagou/job//_update
{
"doc":{
"comments":
}
} - 删除文档
DELETE lagou/job/
- 删除type
POST lagou/job/_delete_by_query?conflicts=proceed
{
"query": {
"match_all": {}
}
} - 删除索引
DELETE lagou
- 获取索引信息
5. es的批量操作
- 原始数据
- 批量查询
GET _mget
{
"docs":[
{
"_index":"testdb",
"_type":"job1",
"_id":
},
{
"_index":"testdb",
"_type":"job2",
"_id":
}
]
}或者
GET testdb/_mget
{
"docs":[
{
"_type":"job1",
"_id":
},
{
"_type":"job2",
"_id":
}
]
}或者
GET testdb/job1/_mget
{
"docs":[
{
"_id":
},
{
"_id":
}
]
}或者
GET testdb/job1/_mget
{
"ids":[,]
} - bulk批量操作
- 批量查询
- 批量导入可以合并多个操作,比如index,delete,update,create等等。也可以帮助我们从一个索引导入到另一个索引。
- 命令格式:
action_and_meta_data\n
optional_source\n
action_and_meta_data\n
optional_source\n
...
action_and_meta_data\n
optional_source\n - 例如:
{"index":{"_index":"test1", "_type":"type1", "_id":}}
{"field1":"value1", ...} {"delete":{"_index":"test1", "_type":"type1", "_id":}} {"create":{"_index":"test1", "_type":"type1", "_id":}}
{"field1":"value1", ...} {"update":{"_index":"test1", "_type":"type1", "_id":}}
{"doc":{"field1":"value1"}} - 需要注意的是,每一条数据都由两行构成(delete除外),其他的命令比如index和create都是由元信息行和数据行组成,update比较特殊它的数据行可能是doc也可能是upsert或者script。
- 批量导入
POST _bulk
{"index":{"_index":"lagou", "_type":"job", "_id":}}
{"title":"python分布式爬虫开发", "salary_min":, "city":"北京", "company":{"name":"百度", "company_addr":"北京市软件园"}, "publish_date":"2017-4-16", "comments":}
{"index":{"_index":"lagou", "_type":"job", "_id":}}
{"title":"python django开发", "salary_min":, "city":"上海", "company":{"name":"腾讯", "company_addr":"北京市软件园4-1"}, "publish_date":"2017-4-17", "comments":}
6. 映射(mapping)
创建索引的时候,可以预先定义字段的类型以及相关属性,mapping是类似于数据库中的表结构定义,主要作用如下:
- 定义index下的字段名
- 定义字段类型,比如数值型、浮点型、布尔型等
- 定义倒排索引相关的设置,比如是否索引、记录position等
作用:会让索引建立得更加细致和完善
类型:静态映射和动态映射
内置类型:
- String类型:text,keyword
- 数字类型:long, integer, short, byte, double, float
- 日期类型:date
- Bool类型:boolean
- Binary类型:binary
- 复杂类型:object,nested
- Geo类型:geo-point,geo-shape
- 专业类型:ip,competion
常用属性:
属性 | 描述 | 适合类型 |
store |
Yes:存储,no:不存储,默认no |
all |
index |
yes:分析,no:不分析,默认值为true |
string |
null_value |
如果字段为空,可以设置一个默认值,比如“NA” |
all |
analyzer |
可以设置索引和搜索时用的分析器,默认使用的是standard分析器,还可以使用whitespace、simple、english |
all |
include_in_all |
默认es为每个文档定义一个特殊域_all,它的作用是让每个字段被搜索到,,如果不想某个字段被搜索到,可以设置为false |
all |
format |
时间格式字符串的模式 |
date |
- 创建映射
PUT zhilian
{
"mappings": {
"job":{
"properties": {
"title":{
"type":"text"
},
"salary_min":{
"type":"integer"
},
"city":{
"type":"keyword"
},
"company":{
"properties": {
"name":{
"type":"text"
},
"company_addr":{
"type":"text"
},
"employee_count":{
"type":"integer"
}
}
},
"publish_date":{
"type":"date",
"format": "yyyy-MM-dd"
},
"comments":{
"type": "integer"
}
}
}
}
} - 获取mapping
GET zhilian/job/_mapping
- 创建映射
7.查询
- 未完待续...
elasticsearch-dsl笔记的更多相关文章
- ElasticSearch详细笔记
ElasticSearch详细笔记 什么是ElasticSearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Luce ...
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- ElasticSearch NEST笔记
ElasticSearch NEST笔记 1. 什么是ElasticSearch? ElasticSearch is a powerful open source search and analyti ...
- elasticsearch学习笔记——相关插件和使用场景
logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...
- ElasticSearch学习笔记(超详细)
文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...
- Elasticsearch学习笔记(二)Search API 与 Query DSL
一. Search API eg: GET /mall/product/_search?q=name:productName&sort=price desc 特点:search的请求参数都是以 ...
- 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...
- 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...
- ElasticSearch 入门笔记1
1. 起步 1. 建demo工程,看文档,做典型demo 2. 资源列表: http://es.xiaoleilu.com/010_Intro/10_Installing_ES.html 3. 启动: ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search { "query": { ...
随机推荐
- Kudu 常见的几个应用场景
不多说,直接上干货! Kudu 常见的几个应用场景 实时更新的应用.刚刚到达的数据就马上要被终端用户使用访问到. 时间序列相关的应用,需要同时支持: 根据海量历史数据查询. 必须非常快地返回关于单个实 ...
- GCC操作
GCC编译器常用选项 生成动态链接库: gcc file.c -fPIC -o file.so, PIC表示Position-Independent Code: 独立地址代码 编译: gcc -c f ...
- 自定义Qt组件-通讯模块(P1)
通讯模块Communicator 通讯模块是整个项目设计中位于最底层的模块,用于处理与串口或网络等设备的通讯,所有设备的通讯通过CommManager类完成,上层软件设计时需要根据comm模块(主要是 ...
- 深入理解vertical-align和line-height的关系
vertical-align的百分比值不是相对于字体大小或者其他什么属性计算的,而是相对于line-height计算的.举个简单的例子,如下CSS代码: { line-height: 30px; ve ...
- JavaSE之Java基础(2)
6.java8新特性 Lambda表达式 接口的默认方法与静态方法 方法引用 重复注解 扩展注解的支持 Optional类 Stream API Date Time API JavaScript引擎N ...
- Redis的原子自增性
INCR key 将 key 中储存的数字值增一. 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作. 如果值包含错误的类型,或字符串类型的值不能表示为数字,那 ...
- spring-cloud构架微服务(2)-全局配置二
接上篇,实际项目中,可能会遇到有些配置项,例如:邮件地址.手机号等在服务已经上线之后做了改动(就当会出现这种情况好了).然后你修改了配置信息,就得一个一个去重启对应的服务.spring-全局配置提供了 ...
- java.lang.OutOfMemoryError: Failed to allocate a 3110419 byte allocation with 741152 free bytes and
在进行SurfaceView的开发时,出现了java.lang.OutOfMemoryError错误: 由于项目是同时显示四路远端传输过来的视频 所以采用的方法是使用:android:hardware ...
- 某地理位置模拟APP从壳流程分析到破解
工具与环境 Xposed IDA 6.8 JEB 2.2.5 Fiddler2 010Editor NEXUS 5 Android 4.4 好久不玩逆向怕调试器生锈,拿出来磨磨! 高手莫要见笑,仅供 ...
- python数据类型和数据运算
数字 整型 包括正整数和负整数,和数学的表示方法一样.如:1.100.8008.-12等. 浮点型 浮点数字也称为小数,如果按照科学计数法表示时,小数点的位置是可变的.如:1.23x109==12.3 ...