一、关于Elasticsearch
1.特点
Elasticsearch基于全文搜索引擎 Apache Lucene ,由Java开发而来,面向API进行搜索, Restful 风格,分布式文件存储。
2.面向文档:
Elasticsearch 将数据以JSON的格式文档的形式;
3.索引:
一个文档就是一个索引,类似数据库中一个数据表;
二、增删查改
一个索引只对应一种类型
增
PUT 索引/类型/文档id
增(自动生成id)
POST 索引/类型
此种方法生成的id
删
DELETE 索引/类型/文档id
查
GET 索引/类型/文档id
GET 索引/类型/_search
_search 为查询关键字
GET 索引/类型/_search?q=userName:liaoge777
查询userName为liaoge777的数据,q为查询参数赋值
_source 对应文档数据;
查询表达式
1.匹配搜索
GET 索引/类型/_search { "query": { "match": { "userName": "liaoge777" } } }
2.过滤搜索
GET 索引/类型/_search { "query": { "bool": { "must": { "match": { "userName": "lewis" } }, "filter": { "range": { "age": {"gt": 26} } } } } }
同时匹配用户名为lewis 并且 age 区间是大于26的数据
3.全文搜索(传统数据库难以做到的)
GET 索引/类型/_search { "query": { "match": { "favorite": "playing games" } } }
分别回去匹配 playing 和 games词汇,并返回符合条件的数据,并使用_score字段表示匹配度
4.短语搜索(严格匹配短语,而不去分割匹配的词汇)
GET 索引/类型/_search { "query": { "match_phrase": { "favorite": "playing games" } } }
不会分别匹配 playing 和 games,严格匹配字段包含 playing games的数据
5.高亮搜索
GET 索引/类型/_search { "query": { "match_phrase": { "favorite": "playing games" } }, "highlight":{ "fields": { "favorite": {} } } }
对符合条件的"favorite"字段加上高亮
6.聚合
关键字 aggs 类似SQL中的 Group by ,聚合并得到计数
{ "aggs": { "all_ages": { "terms": { "field": "age" } } } }
通过"age"字段分组,并得出分组计数结果
_search 为查询所有的关键字;