安装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) |
倒排索引待解决的问题
- 大小写转换问题,如python和PYTHON是否应该为一个词
- 词干抽取,looking和look应该处理为一个词
- 分词,若屏蔽系统 分为什么和是
- 倒排索引文件过大-压缩编码
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
|