ES使用
1 ES结构和索引
1.1 ES结构
方便理解,可以将ES类比为数据库进行理解
Types的概念逐渐弱化,于6.x版本,一个index只允许一个type。于7.x版本之后,已将type概念删除
1.2 倒排索引
- 正排索引:就是我们数据库中的数据结构,通过id去关联对应的数据
- 倒排索引:则是通过数据的关键词,去关联对应的id
2 索引(index)使用
ES演示示例,都是通过发送请求来实现,可以用postman来进行
1 | # 创建索引 |
3 文档(document)使用
1 | # 创建文档 |
4 文档进阶查询
1 | url: http://localhost:9200/(index名)/_search |
1 | // 示例json数据 |
- 文档进阶查询主要在请求body上进行处理
4.1 where条件查询
1 | { |
(1)全文检索匹配条件
当查询条件为字符串时,会进行分词查询,也就是将字符串值拆分,一个个去匹配
非字符串时,就是普通的eq匹配
1
2
3
4
5
6
7
8
9
10
11"match": {
"字段名": "值"
}
// 全部匹配(无需参数)
"match_all": {}
// 精确匹配(不进行分词)
"match_phrase": {
"字段名": "值"
}(2)and查询
类似sql的
where 条件1 and 条件2
1
2
3
4
5
6"bool": {
"must": [
"match": {},
"match": {}
]
}(3)or查询
类似sql的
where 条件1 or 条件2
1
2
3
4
5
6"bool": {
"should": {
"match": {},
"match": {}
}
}(4)过滤范围
类似sql的不等于,但不作为匹配条件,用于数据最后过滤
gt=大于,lt=小于
不支持ge,le,eq,要等于就在查询条件match拼接
1
2
3
4
5
6
7
8
9"bool": {
"filter": {
"range": {
"字段名": {
"gt": "值"
}
}
}
}
4.2 分页查询
- 使用起来类似sql的
limit 0, 1
1
2"from": 起始位置(从0开始)
"size": 数据大小
4.3 查询指定字段
- 类似sql的
select xx, xx
1
"_source": ["字段名1", "字段名2"]
4.4 排序
- 类似sql的
order by xxx asc/desc
1
2
3
4
5"sort": {
"字段名": {
"order": "asc/desc"
}
}
4.5 聚合函数
- 类似sql的
select count(xx) from xxx group by xx
- 聚合函数:term类似sql的count统计个数,sum求和,avg求平均值
1
2
3
4
5
6
7"aggs": {
"xxxx": { // 变量名,可以随意起
"聚合函数": {
"field": "字段名"
}
}
}
4.6 查询结果高亮
1 | "highlight": { |
5 映射
- 映射类似于mysql中的表结构,来规定表中的数据结构
- type:为字段类型,text表示支持分词查询,password不知分词查询
- index:是否允许索引,即是否可以充当查询条件
1
2
3
4
5
6"properties": {
"字段名": {
"type": "text/password",
"index": true/false
}
}
1 | # 创建映射 |