Ex_treme's blog.

elasticsearch基础

2018/04/29 Share

安装elasticsearch

1
2
3
4
$ git clone git://github.com/medcl/elasticsearch-rtf.git -b master --depth 1
$ cd elasticsearch-rtf/bin
$ ./elasticsearch
$ open http://localhost:9200/

head插件和kibana的安装

1
2
3
4
5
$ git clone git://github.com/mobz/elasticsearch-head.git
$ cd elasticsearch-head
$ cnpm install(从淘宝镜像仓库下载第三方依赖包)
$ npm run start
$ open http://localhost:9100/(默认配置链接不上)

配置elasticsearch

1
2
3
4
5
6
7
8
$ cd elasticsearch-rtf
$ gedit *.yml
在尾部加入以下配置信息
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"
保存重启

安装kibana

1
2
3
在head中确定elasticsearch版本,去官方网站下载一致的kibana版本。
$ ./kibana
$ open http://localhost:5601/

elasticsearch概念

  • 集群:一个或者多个结点组织在一起
  • 结点:一个结点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫画角色的名字
  • 分片:将索引划分为多份的能力,允许水平分割和拓展扩容,多个分片响应请求,提高性能和存储量。
  • 副本:创建分片的一份或多份的能力,在一个结点失败其余结点可以顶上。

elasticsearch和mysql对应关系

elasticsearch mysql
index(索引) 数据库
type(类型)
documents(文档)
fields

HTTP方法

HTTP1.0 定义三种请求方式: GET,POST和HEAD方法
HTTP1.1新增了物种方法:OPTIONS,PUT,DELETE,TRACE,CONNECT

方法 描述
GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据请求处理。数据被包含在请求体中。POST请求可能导致新的资源的建立和/或已有资源的修改。
PUT 项服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。

倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。

Python写各大聊天系统的屏蔽脏话功能原理

关键词 文章
python 文章1,文章3
聊天 文章2
系统 文章3,文章4
屏蔽脏话 文章5
功能原理 文章6,文章7,文章8
关键词 倒排列表
python (文章1,<2,10>,2)
聊天 (文章2,<12,25,100>,3)
系统 (文章3,<10>,1)
屏蔽脏话 (文章5,<50,60>,2)
功能原理 (文章6,<56,57,58>,3)

倒排索引待解决的问题

  1. 大小写转换问题,如python和PYTHON是否应该为一个词
  2. 词干抽取,looking和look应该处理为一个词
  3. 分词,若屏蔽系统 分为什么和是
  4. 倒排索引文件过大-压缩编码

elasticsearch基本的索引和文档CRUD操作

创建索引

1
2
3
4
5
6
7
8
9
PUT lagou
{
"settings":{
"index":{
"number_of_shards":5,
"number_of_replicas":1
}
}
}

获取索引信息

1
2
3
4
GET lagou/_settings
GET _all/_settings
GET .kibaba,lagou/_settings
GET _settings

更新索引信息

1
2
3
4
PUT lagou/_settings
{
"number_of_replicas":2
}

保存文档

1
2
3
4
5
6
7
8
9
PUT qa/huawei/1
{
"id":"mls060001",
"question":"什么是机器学习?",
"topic":"MLS",
"answer":"机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。",
"url":"http://support.huaweicloud.com/usermanual-mls/zh-cn_topic_user_guide.html",
"expand_questions":"机器学习的概念?"
}

获取文档

1
2
3
GET qa/huawei/1
GET qa/huawei/1?_source=question,answer
GET qa/huawei/1?_source

修改文章

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUT qa/huawei/1
{
"id":"mls060001",
"question":"什么是机器学习?",
"topic":"MLS",
"answer":"机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。",
"url":""http://support.huaweicloud.com/usermanual-mls/zh-cn_topic_user_guide.html",
"expand_questions":"机器学习的概念?",
}

POST qa/huawei/_update
{
"doc":{
"id":1
}
}

删除文档

1
2
DELETE qa/huawei/1
DELETE qa

elasticsearch和mget和bulk批量操作

mget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
GET _mget
{
"docs":[
{
"_index":"qa",
"_type":"huawei",
"_id":1
},
{
"_index":"qa",
"_type":"huawei",
"_id":2
},
{
"_index":"qa",
"_type":"huawei",
"_id":3
}
]
}
GET qa/huawei/_mget
{
"ids":[1,2,3]
}

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

需要注意的是,每一条数据都由两行构成(delete除外),其它的命令比如index和create都是由元信息行和数据行构成呢个,update比较特殊它的数据行可能是doc也可能是upsert或者script,如果不了解的朋友可以参考前面的uodate的翻译。

栗子:

{“index”:{"_index":“test”,"_type":“type1”,"_id":“1”}}
{“field1”:“value1”}

映射(mapping)

映射:创建索引的时候,可以预先定义字段的类型以及相关属性
Elasticsearch会根据JSON源数据的基础类型猜测逆想要的字段映射。将输入的数据转变成可搜索的索引项。Mapping就是我们自己定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。
作用:会让索引建立的更加细致和完善
类型:静态映射和动态映射

内置类型

string类型:text,keyword(string类型在es5开始已经废弃)
数字类型: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
include_in_all 默认es为每个文档定义一个特殊域_all,它的作用是让每个字段被搜索到,如果不想某个字段被搜索导,可以设置为false all
format 时间格式字符串的模式 date

创建索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PUT qa
{
"mappings": {
"huawei":{
"properties": {
"md5":{
"type":"text"
},
"question":{
"type":"text"
},
"topic":{
"type":"keyword"
},
"answer":{
"type":"text"
},
"url":{
"type":"text"
},
"expand":{
"type":"text"
}
}
}
}
}

GET qa/_mapping
GET _all/_mapping
CATALOG
  1. 1. 安装elasticsearch
  2. 2. head插件和kibana的安装
    1. 2.1. 配置elasticsearch
    2. 2.2. 安装kibana
  3. 3. elasticsearch概念
    1. 3.1. elasticsearch和mysql对应关系
    2. 3.2. HTTP方法
    3. 3.3. 倒排索引
    4. 3.4. 倒排索引待解决的问题
  4. 4. elasticsearch基本的索引和文档CRUD操作
    1. 4.1. 创建索引
    2. 4.2. 获取索引信息
    3. 4.3. 更新索引信息
    4. 4.4. 保存文档
    5. 4.5. 获取文档
    6. 4.6. 修改文章
    7. 4.7. 删除文档
  5. 5. elasticsearch和mget和bulk批量操作
    1. 5.1. mget
    2. 5.2. bulk批量操作
  6. 6. 映射(mapping)
    1. 6.1. 内置类型
    2. 6.2. 创建索引