• Elasticsearch概述,安装并使用


    1.简单谈谈Elasticsearch----搜索引擎

    搜索:
    概念:用户输入想要的关键词,返回含有该关键词的所有信息。
    场景:
    1 互联网搜索:谷歌、百度、各种新闻首页
    2 站内搜索(垂直搜索):企业 OA 查询订单、人员、部门,电商网站内部搜索商品(淘宝、京东)场景。
    搜索有两种方式:1.基于数据库搜索;
    数据库搜索有弊端,当数据量巨大的时候(上亿条数据),尤其明显

    基于数据库搜索:

    站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。
    问题出现:
    存储问题。电商网站商品上亿条时,涉及到单表数据过大必须拆分表,数据库磁盘占用过大必须分库(mycat )。
    性能问题:解决上面问题后,查询 笔记本电脑 等关键词时,上亿条数据的商品名字段逐行扫描,性能跟不上。
    不能分词。如搜索 笔记本电脑 ,只能搜索完全和关键词一样的数据,那么数据量小时,搜索“ 笔记电脑 电脑 ”数据要不要给用户。

    互联网搜索

    数据量太大。PB 级。我们可以使用搜索引擎来解决数据库搜索的问题: 搜索也是数据库,搜索可以进行分词搜索,速度很快。

    常见的搜索引擎: 

    ElasticSearch Solr 比较:
    1. 当单纯的对已有数据进行搜索时, Solr 更快

    2. 当实时建立索引时, Solr 会产生 io 阻塞,查询性能较差,ElasticSearch具有明显的优势

    3. 随着数据量的增加, Solr 的搜索效率会变得更低,而 ElasticSearch却没有明显的变化

    1 es 基本是开箱即用 ( 解压就可以用 !)   , 非常简单。 Solr 安装略微复杂一丢丢!
    2 Solr 利用 Zookeeper 进行分布式管理 , 而Elasticsearch自身带有分布式协调管理功能
    3 Solr 支持更多格式的数据 , 比如 JSON XML CSV , 而Elasticsearch仅支持 json 文件格式。
    4 Solr 官方提供的功能更多 , Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana 友好支撑
    5.Solr 查询快 , 但更新索引时慢 ( 即插入删除慢 ) ,用于电商等查询多的应用;
    ES 建立索引快 ( 即查询慢 ) ,即实时性查询快,用于 facebook 新浪等搜索。
    Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
    6 Solr 比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch 相对开发维护者较少 , 更新太快 , 学习使用成本较高。

    Elasticsearch 是什么

    The Elastic Stack, 包括 Elasticsearch 【搜索,分析】、 Kibana 【可视化】、 Beats Logstash 【数据的搜集】(也称为 ELK Stack )。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。
    Elaticsearch ,简称为 ES ES 是一个 开源的高扩展的分布式全文搜索引 , 是整个 ElasticStack 技术栈的核心。
    它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。

    Elasticsearch的使用场景

    国外:
    • 维基百科,类似百度百科,网络七层协议的维基百科,全文检索,高亮,搜索推荐
    • Stack Overflflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到it问题去上面发帖,热心网友下面回帖解答。
    • GitHub(开源代码管理),搜索上千亿行代码。
    • 电商网站,检索商品
    • 日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana
    • 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java编程思想》的监控,如果价格低于27块钱,就通知我,我就去买。
    • BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。
    国内:
    • 百度搜索,第一次查询,使用es
    • OAERP系统站内搜索。
    es:搜索的一款数据库,支持的数据格式json

    2.安装elasticsearch

    1 、安装 JDK ,至少 1.8.0_73 以上版本,验证: java -version
    2 、下载和解压缩 Elasticsearch 安装包,查看目 录结构。
    https://www.elastic.co/cn/downloads/elasticsearch
    下载地址: https://www.elastic.co/cn/downloads/
    历史版本下载: https://www.elastic.co/cn/downloads/past-releases/

    解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为浏览器访问的 http 协议 RESTful 端口。打开浏览器,输入地址: http://localhost:9200 ,测试返回结果,返回结果如下

    3.Windows安装Kibana 

    1 kibana es 数据的前端展现,数据分析时,可以方便地看到数据。作为开发人员,可以方便访问es
    https://www.elastic.co/cn/downloads/
    历史版本下载: https://www.elastic.co/cn/downloads/past-releases/
    2 、下载,解压 kibana
    3 、启动 Kibana bin\kibana.bat
    4 、浏览器访问 http://localhost:5601 进入 Dev Tools 界面。像 plsql 一样支持代码提示。
    5 、发送 get 请求,查看集群状态 GET _cluster/health 。相当于浏览器访问。

    4. ES中常见的概念 

    Elasticsearch 面向文档型数据库 ,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库MySQL 存储数据的概念进行一个类比
    ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个 type Elasticsearch 7.X , Type 的概念已经被删除了。

    5. ES常用API接口

    创建索引--数据库 

    有两种方式:

    PUT /索引名称/类型名称/1 (创建索引并添加一条文档)

    PUT /索引名称/类型(创建索引但不添加数据)

    删除索引

    DELETE /索引名

    查询所有的索引 

    GET /_cat/indices?v

     

    查看索引的结构 

    GET /索引名

     添加文档--记录

    两种添加方式

    指定id的值(等同于修改,存在替换掉,不存在添加)

    PUT /索引名/_doc(_doc:默认类型)/id值

    不指定id

    POST /索引名/_doc

    查询文档--id查询

    GET /索引名称/类型名称/id值

    修改文档 

    指定所有的列修改,若只指定部分列,则其他的列消失

    PUT /索引名/类型/id值

     

    只修改部分列

    POST /索引名/类型/id值/_update

    删除文档

    提交方式DELETE提交方式 根据不同的操作具有不同的提交方式restful风格

    GET 查询
    PUT 修改
    POST 添加操作
    DELETE 删除操作

     

    查询所有的文档

    GET /索引名/类型/_search

     根据条件搜索

    GET /索引名/类型/_search?q=字段名:字段值

    把查询的数据封装成json数据

    GET /索引名/类型/_search
    {
      "query":{
        "match":{
          "字段名":字段值
        }
      }
    }

     指定查询某些列

    GET /索引名/类型/_search
    {
      "query":{
        "match":{
          "字段名":字段值
        }
      },
      "_source":["字段名","字段名"]
    }

     分页查询

    GET /索引名/类型/_search
    {
      "query":{
        "match":{
          "字段名":字段值
        }
      },
      "_source":["字段名","字段名"]
      "from":0,
      "size":1
    }

    大于小于查询

    gt : 大于 gte: 大于等于 lt: 小于 ,lte:小于等于

    GET /索引名/类型/_search
    {
      "query":{
        "range":{
          "字段名":{
            "gt":字段值
          }
        }
      },
      "_source":["字段名","字段名"],
      "from":0,
      "size":10
    }

    排序查询

    asc 升序  desc 降序

    GET /索引名/类型/_search
    {
      "query":{
        "range":{
          "字段名":{
            "gt":字段值
          }
        }
      },
      "_source":["字段名","字段名"],
      "from":0,
      "size":10,
      "sort":[
        {
          "字段名

    ":{
            "order":"asc"
          }
        }
       ]
    }

    多条件查询

    且查询

    select * from 表名 where 列=值 and 列=值........

    must====等价于and

    GET /索引名/类型/_search
    {
      "query":{
        "bool":{
          "must":[
            {
              "match":{
                "字段名":"条件值"
              }
            },
            {
              "match":{
                "字段名":条件值
              }
            }
          ]
        }
      }

     或查询

    select * from 表名 where 列=值 or 列=值........

    should等价于or

     GET /索引名/类型/_search
    {
      "query":{
        "bool":{
          "should":[
            {
              "match":{
                "字段名":"条件值"
              }
            },
            {
              "match":{
                "字段名":条件值
              }
            }
          ]
        }
      }

    取反查询

    select * from 表名 where 列!=18

    must_not等价于!=

      GET /索引名/类型/_search
    {
      "query":{
        "bool":{
          "must_not":[
            {
              "match":{
                "字段名":"条件值"
              }
            }
          ]
        }
      }

    高亮查询

    GET /索引名/类型/_search
    {
      "query":{
          "match":{
            "字段名":"条件值"
          }
      },
      "highlight":{
        "pre_tags":"",
        "post_tags":"
    ",
        "fields":{
          "条件字段名":{}
        }
      }
    }

    返回给前端页面时,会显示高亮 

      

  • 相关阅读:
    树莓派4B安装ubuntu使用VNC连接
    idea 集成 git 后使用的常用命令
    竞赛选题 深度学习YOLO抽烟行为检测 - python opencv
    java毕业设计毕业设计管理系统Mybatis+系统+数据库+调试部署
    threejs窗口变化重新自适应加载
    华测监测预警系统 2.2 存在任意文件读取漏洞
    STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于GPIO)
    在哪里考华为认证更容易?
    Redis数据结构:加权集合
    邻接链表作为存储结构程序改错
  • 原文地址:https://blog.csdn.net/qq_44189274/article/details/126346348