Elasticsearch 基础知识及其 *** 作实例

Elasticsearch 基础知识及其 *** 作实例,第1张

Elasticsearch 基础知识及其 *** 作实例 1、什么是Elasticsearch?

    Elasticsearch 是一个基于 Apache Lucene(TM) 的开源搜索引擎。无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

主要特点:
  1. 分布式的实时文件存储,每个字段都被索引并可被搜索
  2. 分布式的实时分析搜索引擎–做不规则查询
  3. 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据

Elasticsearch 使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

ES能做什么?

全文检索(全部字段)、模糊查询(搜索)、数据分析(提供分析语法,例如聚合)

关于什么是 REST API, 参考: https://www.zhihu.com/question/28557115

与其他数据库相比较 redismysqlelasticsearchhbasehadoop/hive容量/容量扩展低中较大海量海量查询时效性极高中等较高中等低查询灵活性较差 k-v模式非常好,支持sql较好,关联查询较弱,但是可以全文检索,DSL语言可以处理过滤、匹配、排序、聚合等各种 *** 作较差,主要靠rowkey,scan的话性能不行,或者建立二级索引。但是使用phoenix可以解决这些问题非常好,支持sql写入速度极快中等较快较快慢写入速度弱强弱弱弱 Elasticsearch的数据存储方式 概念解释cluster

整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。

node

集群中的一个节点,一般只一个进程就是一个node

shard

分片,即使是一个节点中的数据也会通过 hash 算法,分成多个片存放,默认是 5 片。(7.0 默认是 1 片)

index

相当于EDBMS 的 database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个 shard 存放,也可能存放在多个 node 中。

type

类似于 rdbms 的 table,但是与其说像 table,其实更像面向对象中的 class , 同一Json 的格式的数据集合。((6.x只允许建一个,7.0被废弃,造成index实际相当于table级))

document

类似于 rdbms 的 row、面向对象里的object

field

相当于字段、属性

2、 *** 作实例 查看ES中的节点信息·

GET _cat/nodes/?v

查看集群的健康状况 

GET /_cat/health?v

查看ES中有哪些索引 

GET _cat/indices?v

删除索引 

DELETe /movie_index

新增文档(docuement) 唯一标识为 1

PUT /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) 唯一标识为 2 

PUT /movie_index/movie/2
{
  "id":2,
  "name":"operation meigong river",
  "doubanScore":8.0,
  "actorList":[
    {"id":3,"name":"zhang han yu"}
  ]
}

新增文档(docuement) 唯一标识为 3 

PUT /movie_index/movie/3
{
  "id":3,
  "name":"incident red sea",
  "doubanScore":5.0,
  "actorList":[
    {"id":4,"name":"zhang chen"}
  ]
}

#修改index下的内容

POST /movie_index/movie/1/_update
{
  "doc": {
    "doubanScore":8.6
  }
}

#查询查询查询movie_index下的下的下所有内容

GET  movie_index/_search

#删除标识符为 1 的dicument 

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"
    }
  }
}

#按短语对index进行查询(表示把按空格分割的所有内容当做一个字段)

GET /movie_index/_search
{
  "query": {
    "match_phrase": {
      "actorList.name": "zhang yi"//按短语搜索
    }
  }
}

#filter 查询后过滤(查询name等于red并且actorList.id等于3的document)

GET movie_index/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  },
  "post_filter": {
    "term": {
      "actorList.id": "3"
    }
  }
}

#should 或运算 查询前过滤(查询actorList.id等于1或者等于3的document)

以上为sql表达的查询语句

GET movie_index/_search
{
  "query": {
    "bool": {
        "should":[
            {"term":{"actorList.id":1}},
            {"term":{"actorList.id":3}}
          ]
    }
  }
}

#must 与运算 查询name等于red并且actorList.id等于1的document

GET movie_index/_search
{
  "query": {
    "bool": {
        "must": [
          {"term": {
            "name": {
              "value": "red"
            }
          }},
          {"term": {
            "actorList.id": {
              "value": "1"
            }
          }}
        ]
    }
  }
}

# 非运算(查询actorList.id不等于1的document)

GET /movie_index/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"term": {
          "actorList.id": {
            "value": "1"
          }
        }}
      ]
    }
  }
}

#范围查询(查询doubanScore大于等于8小于9的document)


GET /movie_index/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "doubanScore": {
            "gte": 8,  //gt 大于 gte 大于等于
            "lt": 9   // lt 小于  lte 小于等于
          }
        }
      }
    }
  }
}

#模糊查询 近似查询 

GET /movie_index/_search
{
  "query": {
    "fuzzy": {
      "name": "rad"
    }
  }
}

#排序(按照doubanScore升序排序) 

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"]
}

#聚合(统计每个演员演了多少部电影)

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"
      }
    }
  }
}

#统计doubanScore的sum、avg、max、min,并按sum升序排序

 

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"
            }
          }
        }
      }
  }
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5665009.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存