Elasticsearch是一个基于Lucence的搜索服务器。它提供了一个分布式的搜索引擎,基于restfulweb接口。广泛应用于云计算中,能够实时搜索,具有稳定,可靠,快速的特点。
它其实也是一种数据库的优化方案,它的强大之处在于模糊查询。如果是普通数据库查询like%xxxx%,其实是不走索引的。只要你的数据库的量很大,你的查询肯定会是秒级别的。(es搜索速度很快)
还有一点是我想在目前参与的资产监控平台加一个es搜索功能,公司资产太多,资产查询模块速度较慢,值得优化。
Elasticsearch服务端
查看集群健康状态
GET/_cat/healthv查看节点状态
GET/_cat/nodesv查看所有索引信息
GET/_cat/indicesv五.索引操作创建索引并查看
PUT/customerGET/_cat/indicesv删除索引并查看
DELETE/customerGET/_cat/indicesv六.文档操作在索引中添加文档
put/customer/doc/1{"name":"JohnDoe"}查看索引的文档
GET/customer/doc/1修改索引的文档
POST/customer/doc/1/_update{"doc":{"name":"JoneDoe"}}删除索引的文档
DELETE/customer/doc/1对索引中的文档执行批量操作
查看索引信息
查看索引信息GET/_cat/indicesv八.搜索入门搜索全部
GET/bank/_search{"query":{"match_all":{}}}分页搜索
GET/bank/_search{"query":{"match_all":{}},"from":0,"size":10}搜索排序,使用sort表示,列如按balance字段降序
GET/bank/_search{"query":{"match_all":{}},"sort":{"balance":{"order":"desc"}}}搜索并返回指定字段内容
GET/bank/_search{"query":{"match_all":{}},"_source":["account_number","balance"]}九.条件搜索条件搜索
GET/bank/_search{"query":{"match":{"account_number":20}}}文本类型字段
GET/bank/_search{"query":{"match":{(对于数值类型match操作使用的是精确匹配,对于文本类型使用的是模糊匹配)"address":"mill"}},"_source":["address","account_number"]}短语匹配搜索
GET/bank/_search{"query":{"match_phrase":{"address":"milllane"}}}十.组合搜索组合搜索使用bool来进行组合
must表示同时满足,例如搜索address字段同时包含mill和lane的文档GET/bank/_search{"query":{"bool":{"must":[{"match":{"address":"mill"}},{"match":{"address":"lane"}}]}}}组合搜索should
should表示满足其中任意一个,搜索address字段中包含mill或者lane的文档GET/bank/_search{"query":{"bool":{"should":[{"match":{"address":"mill"}},{"match":{"address":"lane"}}]}}}组合搜索must_not同时不满足
GET/bank/_search{"query":{"bool":{"must_not":[{"match":{"address":"mill"}},{"match":{"address":"lane"}}]}}}组合搜索must和must_not
GET/bank/_search{"query":{"bool":{"must":[{"match":{"age":"40"}}],"must_not":[{"match":{"state":"ID"}}]}}}十一.过滤搜索搜索过滤,使用filter来表示,例如过滤出balance字段在20000~30000的文档;
GET/bank/_search{"query":{"bool":{"must":{"match_all":{}},"filter":{"range":{"balance":{"gte":20000,"lte":30000}}}}}}十二.搜索聚合对搜索进行聚合,使用aggs来表示,类似Mysql中的groupby
例如对state字段进行聚合,统计相同state文档数量
嵌套聚合,例如对state字段进行聚合,统计出相同state的文档数量,再统计出balance的平均值;
对聚合搜索的结果进行排序,例如按balance的平均值降序排列;
按字段值的范围进行分段聚合,例如分段范围为age字段的[20,30][30,40][40,50],之后按gender统计文档个数和balance的平均值;