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": { ...
随机推荐
- hduoj 2062Subset sequence
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- StreamWrite类
FileStream类,该对象只能以字节形式读取/写入数据,这就使得操作非常困难. 一般有了FileStream对象,都会借用StreamWrite对象或StreamReader对象的方法来处理文件. ...
- 特殊的流程控制语句break continue exit
break语句可以结束当前的for.foreach.while.do-while.或者switch的执行. for($i=1; $i<10; $i++) { if($i == 5) { echo ...
- 树checkbox选择jquery实例
<!DOCTYPE html> <html> <head> <title></title> <script src="htt ...
- selenium 服务器端运行命令
cd C:\Users\kfa_wangchao\Downloadsjava -jar selenium-server-standalone-2.37.0.jarcmd=getNewBrowserSe ...
- Java—多态
多态——对象的多种形态(继承是多态实现的基础) 引用多态:父类的引用可以指向本类的对象:父类的引用可以指向子类的对象 方法多态:创建本类对象时,调用的方法为本类方法:创建子类对象时,调用的方法为子类重 ...
- check_mk插件 redis
/usr/lib/check_mk_agent/plugins/mk_redis #!/bin/bash echo '<<<redis>>>' hosts=$(ne ...
- matplotlib安装指南
matplotlib安装指南1.介绍NumPy地址 http://www.numpy.org/NumPy:一个Python一个扩展库,支持大量的维度数组和举证运算,对数组提供大量的函数库 SciPy地 ...
- 使用ActiveMQ 传输文件 以及使用Jetty搭建内嵌文件服务器
使用Active发送文件 ActiveMq 本身提供对于传输文件的支持. 1. 直接传输文件: 使用connection.createOutputStream 的形式.这种方式适合小文件.不能传输大文 ...
- 打开excl链接时总是出现问题
主要现象:1.提示"发生了意外错误":2.报错"由于本机限制无法打开链接" 原因: 这个是由于默认浏览器异常造成的,就是比如你下载了新的浏览器,然后为默认浏览器 ...