1、集群:一个或者多个节点组织在一起
2、节点:一个节点是集群中的一个服务器,由一个名字标识,默认是一个随机漫画角色的名称
3、分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片相应请求,提高性能和吞吐量
4、副本:创建分片的一份或者多份的能力,在一个节点失败其余节点可以顶上
elastic search mysql
index(索引) 数据库
type(类型) 表
documents(文档) 行
fields 列
1、倒排索引:需要根据属性的值来查找记录
这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址,由于不是记录来确定属性的值,而是由属性值来确定记录的位置,所以称为倒排索引。
带有倒排索引的文件,称为倒排索引文件,即倒排文件。
2、倒排索引待解决的问题
2.1、大小写转换问题
2.2、词干抽取
2.3、分词
2.4、倒排文件过大-压缩编码
3、es的CURD
shards一旦设置就不能修改
replicas可以多次修改
put、post、get、delete
get goods/_settings 获取goods的配置
get _all/_settings 获取全部配置
get goods,book/_settings 获取多个配置,中间用英文逗号隔开
# 修改副本
put goods/_settings
{
“number_of_replicas”:2
}
#保存文档
put goods/good/1
{
“name”:”haha”,
“num”:1
}
#获取数据
get goods/good/1
get goods/good/1?_source=name
get goods/good/1?_source=name,num
#修改
#1、覆盖
put goods/good/1
{
“name”:”hahahahaha”,
“num”:12
}
#2、部分修改
post goods/good/1
{
“doc”:{
“name”:”hahaha”
}
}
#删除
delete goods/good/1
delete goods/good
delete goods
批量操作
get _mget
{
“docs”:[
{“_index”:”goods1”,
“_type”:”good1”,
“_id”:1
},
{
“_index”:”goods2”,
“_type”:”good2”,
“_id”:2
}
]
}
get goods/_mget
{
“docs”:[
{
“_type”:”good1”,
“_id”:1
},
{
“_type”:”good2”,
“_id”:2
}
]
}
get goods/good/_mget
{
“docs”:[
{
“_id”:1
},
{
“_id”:2
}
]
}
get goods/good/_mget
{
“ids”:[1,2]
}
4、bulk批量操作
批量导入可以合并多个操作,比如index,delete,update,create等等,也可以从一个索引导入到另一个索引
除了delete之外,都是执行类型+执行内容2行构成
5、映射(mapping)
定义数据表时,预先定义字段的类型及相关属性
elasticsearch本身会自动识别类型
作用:会让索引建立的更加细致和完善
类型:静态映射和动态映射
string类型:text,keyword(string类型在es5开始废弃,key_word完全匹配,不会被分解)
数字类型: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 如果为null,可以设置一个默认值 all
analyzer 可以设置索引和搜索时的分词器,默认standard all
include_in_all 默认es每个文档定义一个特殊域_all,作用每个字段都可以搜索,不想被搜索可以设置false all
format 时间格式字符串模式 date
#设置mapping
put goods
{
“mappings”:{
“good”:{
“properties”:{
“name”:{
“store”:true,
“type”:”text”,
“analyzer”:”ik_max_word”
}
}
}
}
}
#获取mapping方式
get goods/_mapping
get goods/_mapping/good
6、查询分类:
基本查询:使用es内置查询条件进行查询
组合查询:把多个查询组合在一起进行复合查询
过滤:查询同时,通过filter条件在不影响打分的情况下筛选数据
#match查询(会进行分词)
#term查询(不会分词)
#terms查询(不会分词)查询条件有多个,满足一个就可以
get goods/_search
{
“query”:{
terms”:{
“name”:[“haha”,”ha”]
}
}
}
#控制查询的返回数量
{
”query“:{...}
”from“:1,
“size”:10
}
#match_all查询 条件为空,则查询全部,有条件,则完全匹配
#match_phrase 短语查询
get goods/_search
{
“query”:{
"match_phrase”:{
“name”:{
“query”:”es系统“,#es和系统必须同时存在
“slop”:6 #关键词之间的距离
}
}
}
}
#multi_match 可以指定多个字段,字段中可以设置权重:^3
#指定返回字段,只返回stored设置成true的
get goods/_search
{
”stored_firlds“:[“name”,”num”],
“query”:{
"match”:{
“name”:"haha"
}
}
}
#通过sort把结果排序
#range范围查询
#wildcard查询 类似模糊查询
#bool查询,包括:must,should,must_not,filter,还可以做组合过滤查询
“bool”:{
“filter":[…],#不参与打分
"must”:[…]#必须存在
"should”:[…] #只要满足其中之一
“must_not":[…] #必须不存在
}
#查看分析器解析的结果
get /_analyze
{
“analyzer”:”ik_max_word”,
“text”:”python哈哈哈”
}