
Elasticsearch 是一个基于 Apache Lucene(TM) 的开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
主要特点:ES能做什么?
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 分布式的实时分析搜索引擎–做不规则查询
- 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据
Elasticsearch 使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
与其他数据库相比较全文检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)
关于什么是 REST API, 参考: https://www.zhihu.com/question/28557115
整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。
集群中的一个节点,一般只一个进程就是一个node
分片,即使是一个节点中的数据也会通过 hash 算法,分成多个片存放,默认是 5 片。(7.0 默认是 1 片)
相当于EDBMS 的 database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个 shard 存放,也可能存放在多个 node 中。
类似于 rdbms 的 table,但是与其说像 table,其实更像面向对象中的 class , 同一Json 的格式的数据集合。((6.x只允许建一个,7.0被废弃,造成index实际相当于table级))
类似于 rdbms 的 row、面向对象里的object
相当于字段、属性
查看集群的健康状况GET _cat/nodes/?v
查看ES中有哪些索引GET /_cat/health?v
删除索引GET _cat/indices?v
新增文档(docuement) 唯一标识为 1DELETe /movie_index
新增文档(docuement) 唯一标识为 2PUT /movie_index/movie/1
{
"id":1,
"name":"operation red sea",
"doubanScore":8.5,
"actorList":[
{"id":1,"name":"zhang yi"},
{"id":2,"name":"hai qing"},
{"id":3,"name":"zhang han yu"}
]
}
新增文档(docuement) 唯一标识为 3PUT /movie_index/movie/2
{
"id":2,
"name":"operation meigong river",
"doubanScore":8.0,
"actorList":[
{"id":3,"name":"zhang han yu"}
]
}
#修改index下的内容PUT /movie_index/movie/3
{
"id":3,
"name":"incident red sea",
"doubanScore":5.0,
"actorList":[
{"id":4,"name":"zhang chen"}
]
}
#查询查询查询movie_index下的下的下所有内容POST /movie_index/movie/1/_update
{
"doc": {
"doubanScore":8.6
}
}
#删除标识符为 1 的dicumentGET movie_index/_search
#查询index下的所有内容DELETE /movie_index/movie/1
#按字段对index进行查询GET /movie_index/_search
{
"query": {
"match_all": {}
}
}
#按字段对index进行查询(根据对象中的对象字段查询)GET /movie_index/_search
{
"query": {
"match": {
"name": "sea operation" //分词,表示查询包含 sea 或 operation 或 sea + operation
}
}
}
#按短语对index进行查询(表示把按空格分割的所有内容当做一个字段)GET /movie_index/_search
{
"query": {
"match": {
"actorList.name": "hai"
}
}
}
#filter 查询后过滤(查询name等于red并且actorList.id等于3的document)GET /movie_index/_search
{
"query": {
"match_phrase": {
"actorList.name": "zhang yi"//按短语搜索
}
}
}
#should 或运算 查询前过滤(查询actorList.id等于1或者等于3的document)GET movie_index/_search
{
"query": {
"match": {
"name": "red"
}
},
"post_filter": {
"term": {
"actorList.id": "3"
}
}
}
以上为sql表达的查询语句
#must 与运算 查询name等于red并且actorList.id等于1的documentGET movie_index/_search
{
"query": {
"bool": {
"should":[
{"term":{"actorList.id":1}},
{"term":{"actorList.id":3}}
]
}
}
}
# 非运算(查询actorList.id不等于1的document)GET movie_index/_search
{
"query": {
"bool": {
"must": [
{"term": {
"name": {
"value": "red"
}
}},
{"term": {
"actorList.id": {
"value": "1"
}
}}
]
}
}
}
#范围查询(查询doubanScore大于等于8小于9的document)GET /movie_index/_search
{
"query": {
"bool": {
"must_not": [
{"term": {
"actorList.id": {
"value": "1"
}
}}
]
}
}
}
GET /movie_index/_search
{
"query": {
"bool": {
"filter": {
"range": {
"doubanScore": {
"gte": 8, //gt 大于 gte 大于等于
"lt": 9 // lt 小于 lte 小于等于
}
}
}
}
}
}
#排序(按照doubanScore升序排序)GET /movie_index/_search
{
"query": {
"fuzzy": {
"name": "rad"
}
}
}
#查询详细表结构(如字段的类型 )GET /movie_index/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"doubanScore": {
"order": "desc"
}
}
]
}
#分页查询GET /movie_index/movie/_mapping
#只查询某个字段内容(如只想要电影的名字)GET /movie_index/movie/_search
{
"from": 0, // 页数 = (page - 1)* size
"size": 2 // 显示的数量
}
#聚合(统计每个演员演了多少部电影)GET /movie_index/movie/_search
{
"_source": ["name","id"]
}
#统计doubanScore的sum、avg、max、min,并按sum升序排序GET /movie_index/movie/_search
{
"aggs": {
"group_by_actor_id": {
"terms": {
"field": "actorList.id"
}
},
"group_by_actor_name": {
"terms": {
"field": "actorList.name.keyword"
}
},
"group_by_douban_score": {
"terms": {
"field": "doubanScore"
}
}
}
}
GET /movie_index/_search
{
"aggs": {
"group_by_actor_name": {
"terms": {
"field": "actorList.name.keyword",
"order": {
"score_sum": "desc"
}
},
"aggs": {
"score_sum": {
"sum": {
"field": "doubanScore"
}
},
"score_avg": {
"avg": {
"field": "doubanScore"
}
},
"score_max": {
"terms": {
"field": "doubanScore"
}
},
"score_min": {
"terms": {
"field": "doubanScore"
}
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)