• 分布式搜索引擎Elasticsearch


    一、Elasticsearch介绍

    1.Elasticsearch产生背景

    • 大数据量的检索
    • NoSql: not only sql,泛指非关系型的数据库
    • Nginx的7层负载均衡和4层负载均衡

    2.Elasticsearch是什么
    一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎
    Elasticsearch使用Java开发:需安装jdk

    Apache:

    • 公司:开源协议
      在它的条款下开源
      很多主流的开源软件都捐献给Apache,让它维护
      顶级开源项目:Kafka,ES,Echarts

    • Apache服务器:Web服务器(Nginx)
      是当前流行的企业级搜索引擎:稳定可靠,企业里普遍使用
      使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单

    Lucene与Elasticsearch关系:

    • Lucene是个库,只能Java使用,并且复杂
    • Elasticsearch,使用Restful操作

    Elasticsearch与solr:

    • mysql和oracle的关系
      都是分布式的搜索引擎,不是一个软件,核心本质一样
    • solr基于Lucene
    • es集成度高,solr需要更多插件支持
    • Solr是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用

    3.核心概念
    集群:多太ES服务器的配合使用的集合称为集群。
    节点:形成集群的每个服务器称为节点。
    在这里插入图片描述
    Shard:分片,数据可以分为较小的分片。每个分片放到不同的服务器上。
    Replia:副本,为提高查询吞吐量或实现高可用性,副本是一个分片的精确复制,每个分片可以有零个或多个副本。
    全文检索:在一篇文档中搜索要的内容,如果想查的数据快,肯定不是基于mysql的那种索引方式—基于倒排索引,实现的全文检索。

    4.ES与关系型数据库Mysql对比

    Mysql ES
    数据库 索引
    类型
    文档
    建表语句 映射

    在这里插入图片描述

    5.物理设计
    一个集群包含至少一个节点,而一个节点就是一个elasticsearch进程。节点内可以有多个索引。
    默认的,如果你创建一个索引,那么这个索引将会有5个分片(primary shard,又称主分片)构成,而每个分片又有一个副本(replica shard,又称复制分片),这样,就有了10个分片。

    6.ELK是什么
    是日志收集和分析系统。

    ELK=elasticsearch+Logstash+kibana
    elasticsearch:后台分布式存储以及全文检索
    logstash: 日志加工、“搬运工”
    kibana:数据可视化展示

    ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

    7.业务场景

    • 搜索功能
    • ES来替代传统的NoSQL,它的横向扩展机制太方便了

    8.Elasticsearch索引到底能处理多大数据
    一个Lucene索引,不能处理多于21亿篇文档,或者多于2740亿的唯一词条
    一个分片是一个lucene索引,一个es索引默认5个分片

    二、Elasticsearch安装

    ES安装:
    安装jdk(java开发的)---->官网下载,解压---->启动即可(bin目录下bat文件)
    在浏览器输入:http://127.0.0.1:9200/

    ES客户端安装:
    1.restful接口---->直接使用浏览器就可以访问

    2.官方没有提供一个特别好的客户端

    # 安装
    git clone git://github.com/mobz/elasticsearch-head.git
    cd elasticsearch-head
    npm install
    # 启动
    npm run start
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    配置跨域:修改es的配置

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    • 1
    • 2

    浏览器输入:http://localhost:9100/

    • Kibana(官方提供的)
      ES和Kibana版本要严格对应
      官网下载,解压即可
      修改配置—>连接es的地址:
    server.port: 5601
    server.host: "127.0.0.1"
    server.name: lqz
    elasticsearch.hosts: ["http://localhost:9200/"]
    
    • 1
    • 2
    • 3
    • 4

    bin路径下启动kibana
    浏览器访问:http://localhost:5601

    三、倒排索引

    由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而成为倒排索引。
    反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
    对文章内容进行分词,根据分词建立索引(出现的位置和出现的次数)。

    四、索引操作

    索引等同于mysql中的数据库

    • 在5.x(包含)之前,一个索引下可以建立多个映射(表)
    • 6.x后,一个索引下只能建立一个映射(表),之前5.x的查询还能用
    • 7.x后,一个索引下完全只支持一个映射

    haystack:django的app,实现全文检索

    • 底层可以基于 whoosh(python写的,类似于sqlite,文档型的),ES(Java,类似于Mysql,互联网公司用的多),solr(Java,类似于Oracle,传统企业用)
    • 年久失修,只支持es 2.x版本
    • 咱们做全文检索,基于es,自己通过python操作

    配置信息增删改查:

    # 增
    PUT lqz2
    {
       
      "settings": {
       
        "index":{
       
          "number_of_shards":5,
          "number_of_replicas":1
        }
      }
    }
    
    # 删
    DELETE lqz
    
    # 查 
    # 获取lqz2索引的配置信息
    GET lqz2/_settings
    #获取所有索引的配置信息
    GET _all/_settings
    # 同上
    GET _settings
    # 获取lqz和lqz2索引的配置信息
    GET lqz,lqz2/_settings
    
    # 改(一般不改)
    PUT lqz/_settings
    {
       
      "number_of_replicas": 1
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    五、映射管理

    在Elasticsearch 6.0.0或更高版本中创建的索引只包含一个mapping type。
    在5.x中使用multiple mapping types创建的索引将继续像以前一样在Elasticsearch 6.x中运行。
    Mapping types将在Elasticsearch 7.0.0中完全删除。

    在创建索引的时候,可以预先定义字段的类型及相关属性,如果没有设置,es会自动设置。

    Mapping是我们自己定义的字段数据类型,同时告诉es如何索引数据及是否可以被搜索。
    作用:会让索引建立的更加细致和完善

    字段及类型:

    • 字符串类型:text(会分词),keyword(不会分词)
    • 数字类型:long,integer,short,byte double,float
    • 日期类型:data
    • 布尔类型:boolean
    • binary类型:binary
    • 复杂类型:object(实体,对象),nested(列表)
    • geo类型:geo-point,geo-shape(地理位置)----redis中
    • 专业类型:ip,competion(搜索建议)

    建立映射:

    PUT books
    {
       
      "mappings": {
       
        "properties":{
       
          "title":{
       
            "type":"text"
          },
          "price":{
       
            "type":"integer"
          },
          "addr":{
       
            "type":"keyword"
          },
          "company":{
       
            "properties":{
       
              "name":{
       "type":"text"}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    如何解决wmv/asf/asx格式转成mp4/avi/3gp/mpg/flv的问题
    2023全国大学生数学建模ABCDE选题建议,思路模型,小白要怎么选?难度怎么样
    iOS 16.4 之后真机与模拟器无法使用Safari调试H5页面问题
    Git学习笔记
    Redis 技术整理
    Nginx
    电商平台API接口亚马逊国际站获得AMAZON商品详情操作案例
    Calculation View里的Keep Flag 和 Transparent Filter
    prometheus+alertmanager 企业微信告警
    听大佬讲:学习 AXI从哪里开始?
  • 原文地址:https://blog.csdn.net/BLee_0123/article/details/133254507