ElasticSearch安装和简单使用

ElasticSearch

ES安装

Linux下安装ES,

  • 下载:官网下载想要的版本的安装包(.tar.gz),上传到指定目录里,解压,

  • 修改配置文件:修改./elasticsearch-7.16.1/config 目录下的 elasticsearch.yml 配置文件

    image-20230305115629370

    • network.host: 0.0.0.0 表示任何IP都可以访问,实际开发中会设置为具体的IP
    • elasticsearch.yml,ES的配置文件;
    • jvm.options,ES的JVM配置文件;
    • log4j2.properties,ES的日志配置文件;
  • 启动:进入 ./elasticsearch-7.16.1/bin 下,以user-es用户启动es,su user-es ./elasticsearch.(如果以root用户启动会报错)

  • 检查:使用postman访问 http://192.168.1.244:9200/ ,如果返回以下信息证明本机可以访问服务器的es了。

    {
        "name": "poc-2",
        "cluster_name": "elasticsearch",
        "cluster_uuid": "x3o3mnyAQW2nOsbByCTdPw",
        "version": {
            "number": "7.16.1",
            "build_flavor": "default",
            "build_type": "tar",
            "build_hash": "5b38441b16b1ebb16a27c107a4c3865776e20c53",
            "build_date": "2021-12-11T00:29:38.865893768Z",
            "build_snapshot": false,
            "lucene_version": "8.10.1",
            "minimum_wire_compatibility_version": "6.8.0",
            "minimum_index_compatibility_version": "6.0.0-beta1"
        },
        "tagline": "You Know, for Search"
    }
    

ES的基本概念

​ ES是基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全问搜索引擎,且ES支持RestFulweb风格的url访问。ES是基于Java开发的开源搜索引擎,设计用于云计算,能够达到实时搜索,稳定、可靠、快速。此外,ES还提供了数据聚合分析功能,但在数据分析方面,es的时效性不是很理想,在企业应用中一般还是用于搜索。ES自2016年起已经超过Solr等,成为排名第一的搜索引擎应用

ES的特性
速度快、易扩展、弹性、灵活、操作简单、多语言客户端、X-Pack、hadoop/spark强强联手、开箱即用。

  • 分布式:横向扩展非常灵活
  • 全文检索:基于lucene的强大的全文检索能力;
  • 近实时搜索和分析:数据进入ES,可达到近实时搜索,还可进行聚合分析
  • 高可用:容错机制,自动发现新的或失败的节点,重组和重新平衡数据
  • 模式自由:ES的动态mapping机制可以自动检测数据的结构和类型,创建索引并使数据可搜索。
  • RESTful API:JSON + HTTP

基本概念

​ ES中有几个基本概念:索引(index)、类型(type)、文档(document)、映射(mapping)等。我们将这几个概念与传统的关系型数据库中的库、表、行、列等概念进行对比,如下表:

关系型数据库 ES
数据库 database 索引 index
表 table 类型 type (ES6.0之后被废弃,es7中完全删除)
表结构 schema 映射 mapping
行 row 文档 document
列 column 字段 field
索引 反向索引
SQL 查询DSL
select * from table get http://...
update table set PUT http://...
DELETE DELETE http://......

倒排索引

一个文档,首先被分词为多个关键字,每个关键字有一个编号。然后,建立文档与关键字的映射关系。最后,检索的时候根据关键字本身做索引排序。

索引

索引是ES的一个逻辑存储,对应关系型数据库中的库,ES可以把索引数据存放到服务器中,也可以sharding(分片)后存储到多台服务器上。每个索引有一个或多个分片,每个分片可以有多个副本。

文档

存储在ES中的主要实体叫文档,可以理解为关系型数据库中表的一行数据记录。每个文档由多个字段(field)组成。区别于关系型数据库的是,ES是一个非结构化的数据库,每个文档可以有不同的字段,并且有一个唯一标识。

映射

映射是对索引库中的索引字段及其数据类型进行定义,类似于关系型数据库中的表结构。ES默认动态创建索引和索引类型的mapping,这就像是关系型数据中的,无需定义表机构,更不用指定字段的数据类型。当然也可以手动指定mapping类型。

ES集群的概念

集群

一个ES集群由多个节点(node)组成, 每个集群都有一个共同的集群名称 (./elasticsearch-7.16.1/config/elasticsearch.yml中的cluster.name设置)做为标识

节点

一个es实例即为一个节点,一台机器可以有多个节点,正常使用下每个实例都应该会部署在不同的机器上。ES的配置文件中可以通过node.master、 node.data 来设置节点类型

  • node.master: true/false 表示节点是否具有成为主节点的资格
  • node.data: true/false 表示节点是否为存储数据

node节点的组合方式:

  • 主节点+数据节点: 默认方式,节点既可以作为主节点,又存储数据
  • 数据节点: 节点只存储数据,不参与主节点选举
  • 客户端节点: 不会成为主节点,也不存储数据,主要针对海量请求时进行负载均衡

分片 shard

如果我们的索引数据量很大,超过硬件存放单个文件的限制,就会影响查询请求的速度,ES引入了分片技术。一个分片本身就是一个完成的搜索引擎,文档存储在分片中,而分片会被分配到集群中的各个节点中,随着集群的扩大和缩小,ES会自动的将分片在节点之间进行迁移,以保证集群能保持一种平衡。分片有以下特点:

  1. ES的一个索引可以包含多个分片(shard);
  2. 每一个分片(shard)都是一个最小的工作单元,承载部分数据;
  3. 每个shard都是一个lucene实例,有完整的简历索引和处理请求的能力;
  4. 增减节点时,shard会自动在nodes中负载均衡(可配置)
  5. 一个文档只能完整的存放在一个shard上
  6. 一个索引中含有shard的数量,默认值为5,在索引创建后这个值是不能被更改的。
  7. 优点:水平分割和扩展我们存放的内容索引;分发和并行跨碎片操作提高性能/吞吐量;
  8. 每一个shard关联的副本分片(replica shard)的数量,默认值为1,这个设置在任何时候都可以修改。

副本 replica

副本(replica shard)就是shard的冗余备份,它的主要作用:

  1. 冗余备份,防止数据丢失
  2. shard异常时负责容错负载均衡

使用

要先创建索引 put,在创建post mapping映射,然后再post 插入数据,

curl -POST IP:9200/索引名称/索引类型/_mapping?pretty -d '{
  索引类型: {
    "properties": {
      "title": {
        "type": "text",
        "store": "true"
      },
      "description": {
        "type": "text",
        "index": "false"
      },
      "price": {
        "type": "double"
      },
      "onSale": {
        "type": "boolean"
      },
      "type": {
        "type": "integer"
      },
      "createDate": {
        "type": "date"
      }
    }
  }
}'
{
  "title": "test title 001",
  "description": "this is a random desc ",
  "price": 22.6,
  "onSale": "true",
  "type": 2,
  "createDate": "2018-01-12"
}

或者直接插入数据,通过指定文档id插入数据。

curl -PUT  IP:9200/索引名称/索引类型/文档ID -d '{
  "title": "test title 003",
  "description": "this is a random desc ",
  "price": 22.6,
  "onSale": "true",
  "type": 2,
  "createDate": "2018-01-12"
}'

参考

  1. Restful URL操作ES
  2. 操作ES
posted @ 2023-05-13 21:49  永恒&  阅读(44)  评论(0编辑  收藏  举报