es
Elasticsearch即es,是一个分布式、RESTful 风格 json存储 的搜索和数据分析引擎,能够解决不断涌现出的各种查询 个人理解,es就一查询功能强大一点的文档
数据库
,后端一般的做法是将数据写入数据库后同步一份到es,供快速查询,官方不建议直接做数据库 java之前用redis,momeryCache做搜索优化的,现在都改用es了参考:https://www.letianbiji.com/elasticsearch/,https://xiaoxiami.gitbook.io/elasticsearch/
增删改查
可也使用RESTful 风格的api,也可以使用一些在post请求后面带上 _[get,mget,search,bluk],实现查询修改
分词器
- 内置分词器:
索引配置
- mapping
- 分词相关
- 联表
- 嵌套
- 父子id
- 业务自联
- null_value,空值替换,仅用于倒排打分,不会替换_source的值
查询条件
- term 词条查询
- 查询数字,布尔值,时间时直接匹配
- 查询text时,根据倒排的后的词条查询
- **查询keywork时,直出即 = **
- range 查询
- 数字范围
- 时间范围
- age >= 0
"range":{ "age":{ "from":0, "to":null } }
- 模糊搜索
- 前缀
- 通配符
- 正则
- 全文检索查询
- match
- 判断是否为null,下面是不为null的,为null改为must_not即可
"must" : [
{
"exists" : {
"field" : "earnestDate",
"boost" : 1.0
}
}]
排序
- es默认是按照打分排序的
- 可以在查询中指定 sort
"sort": [
{
"date": {
"order": "asc"
}
}
]
分页,from = offset
"from":0,
"size":20
聚合
- 其实蛮复杂的
{
"size":0, //不显示查询原数据
"aggs":{
"gruop_by_name":{ //gruop_by_name 聚合命名可以自己用,桶聚合的时候buckets_path需要用到
"terms":{
"field":"name.keyword" //根据name groupby
},
"aggs":{
"max_age":{
"max":{
"field":"age" //最大age
}
}
}
},
"sum_all":{
"sum_bucket":{
"buckets_path":"gruop_by_name>max_age" //对聚合后的bucket进行再计算
}
}
}
}
es在springBoot中的使用
chrome插件
- 推荐 Elasticvue,该有的功能都有,虽然提示不是太全
docker安装es
- docker desktop现在居然收费了,并且找不到代替品,真TM。。。
- 试了不指定版本拉不下来,最新版本也拉不下来,只能拉7.14.1
docker pull elasticsearch:7.14.1
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -e discovery.type=single-node elasticsearch:7.14.1