当前位置: 首页 > news >正文

Elasticsearch的使用

1.Elasticsearch概述
1.1 搜索是什么
        概念:用户输入想要的关键词,返回含有该关键词的所有信息。
场景:         
        (1)互联网搜索:谷歌、百度、各种新闻首页
        (2)站内搜索(垂直搜索):企业 OA 查询订单、人员、部门,电商网站内 部搜索商品(淘宝、京东)场景。
1.2 数据库做搜索弊端
1.2.1 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。
问题出现:
        (1)存储问题。电商网站商品上亿条时,涉及到单表数据过大必须拆分表, 数据库磁盘占用过大必须分库( mycat )。
        (2) 性能问题:解决上面问题后,查询“ 笔记本电脑 ” 等关键词时,上亿条数据 的商品名字段逐行扫描,性能跟不上。
        (3)不能分词。如搜索“ 笔记本电脑 ” ,只能搜索完全和关键词一样的数据,那 么数据量小时,搜索 “ 笔记电脑 ” , “ 电脑 ” 数据要不要给用户。
1.2.2 互联网搜索,肯定不会使用数据库搜索。数据量太大,属于PB级。
我们可以使用搜索引擎来解决数据库搜索的问题 :
搜索也是一款数据库,搜索可以进行分词搜索---搜索速度非常快

1.3 常见的搜索引擎
        ElasticSearch与Solr比较

        (1)当单纯的对已有数据进行搜索时,Solr更快

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

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

总结:

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

1.4 Elasticsearch 是什么
        The Elastic Stack, 包括 Elasticsearch 【搜索,分析】、 Kibana 【可视 化】、 Beats 和 Logstash 【数据的搜集】(也称为 ELK Stack )。能够安 全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、 分析和可视化。
        Elaticsearch,简称为 ES , ES 是一个 开源的高扩展的分布式全文搜索引 擎 , 是整个 ElasticStack 技术栈的核心。
        它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台 服务器,处理 PB 级别的数据。
1.5 Elasticsearch的使用场景
国外:
        维基百科,类似百度百科,“网络七层协议”的维基百科,全文检索,高亮,搜索推荐。
        Stack Overflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到问题去上面发帖,热心网友下面回帖解答。
        GitHub(开源代码管理),搜索上千亿行代码。
        电商网站,检索商品。
        日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logst-
tash+kibana)
        商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java编程思想》的监控,如果价格低于27块钱,就通知我,我就去买。
        BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。

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

解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。

注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为

浏览器访问的 http协议 RESTful 端口。

打开浏览器,输入地址: http://localhost:9200 ,测试返回结果,返回结果如下:

2.2 Windows安装Kibana
        1、kibana是 es 数据的前端展现,数据分析时,可以方便地看到数据。作 为开发人员,可以方便访问 es 。
        https://www.elastic.co/cn/downloads/
        2、下载,解压 kibana 。
        3、启动 Kibana : bin\kibana.bat
        4、浏览器访问 http://localhost:5601 进入 Dev Tools 界面。像 sql 一样支 持代码提示。

3.ES中常见的概念
        Elasticsearch 是 面向文档型数据库 ,一条数据在这里就是一个文档。 为 了方便理解,将
Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比

ES 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里
Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一 个 index 下已经只能包含一个 type ,
Elasticsearch 7.X 中 ,Type 的概念已 经被删除了。

4.ES常用API接口

4.1 基本的操作
4.1.1 创建一个索引
(1) PUT /索引名称/类型名称/1
{
   数据
}
创建索引并往索引中添加一条文档

(2)指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立
PUT /索引名
PUT /wdqy151
{
   "mappings":{
      "properties": {
          "name":{
             "type": "text"
          },
          "age":{
             "type": "integer"
          }
      }
   }
}

字段数据类型

        字符串类型
                text、keyword

        text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;

        keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持 聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8 类型的字符,可以通过设置ignore_above指定自持字符长度,超过给 定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

        text: 它会为该字段的内容进行拆词操作,并放入倒排索引表中

        keyword: 它不会进行拆词操作

        使用match匹配查询---对匹配的关键字进行拆词操作,并和倒排索引表中对应。

        使用term精准匹配---它不会对关键字进行拆词操作,而且把关键字作为一个整体和倒排索引表进行匹配

        数值型
                long、Integer、short、byte、double、float、half float、scaled float
        日期类型
                date
        布尔类型
                boolean
        二进制类型
                binary
        等等......

4.1.2 查询索引的结构
GET /索引名

 4.1.3 查询有哪些索引

GET /_cat/indices?v

 

4.1.4  添加文档---记录
# 必须指定id的值

PUT /wdqy151/test/2
{
  "name":"疏词",
  "age":25
}

# 不指定id

POST /wdqy151/test/
{
  "name":"一帆",
  "age":25
}

 4.1.5 查询文档---id查询

查询的提交方式必须为GET

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

 

 4.1.6 删除所有---数据库

DELETE  /索引名

 

4.1.7 删除文档--根据ID

提交方式DELETE提交方式

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

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

 

4.1.8 修改文档
#修改--这种修改必须要求指定所有列,如果只指定部分列,则原来其他列消失

PUT /wdqy151/test/2
{
  "name":"小可",
  "age":18
}

PUT /wdqy151/test/2
{
  "name":"小孟",
}

#部分修改--不会丢失数据

POST /wdqy151/test/2/_update
{
  "doc":{
     "age":23
  }
}

4.2 根据其他条件查询

4.2.1 查询所有的文档

GET /wdqy151/test/_search

 

 4.2.2 根据条件搜索

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

 

4.2.3 查询的条件封装成json数据
#根据年龄生成对应数据的json对象

GET /wdqy151/test/_search
{
  "query": {
    "match": {
      "age":23
    }
  }
}

#指定查询部分列

GET /wdqy151/test/_search
{
  "query": {
    "match": {
       "age":23
    }
  }
  , "_source":["name"]
}

#分页查询数据

GET /wdqy151/test/_search

{
  "query": {
    "match": {
      "age":23
    }
  },
  "_source": ["name"],
  "from": 0,
  "size":3
}

#年龄大于23的查询出来,使用模糊查询

GET /wdqy151/test/_search
{
  "query": {
    "range": {
      "age":{
        "gt":23
      }
    }
  },
  "_source":["name","age"],
  "from":0,
  "size": 3
}

#按年龄降序排序

GET /wdqy151/test/_search
{
  "query": {
    "range": {
      "age": {
        "gt": 20
      }
    }
  },
  "_source": ["name","age"],
  "from": 0,
  "size": 5,
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]

4.3 多条件查询
4.3.1 must等价于and
GET /wdqy151/test/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "age": 24
          }
        },
        {
          "match": {
            "name": "雪"
          }
        }
      ]
    }
  }
}

4.3.2 should代表or
GET /wdqy151/test/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "age": 28
          }
        },
        {
          "match": {
            "name": "雪"
          }
        }
      ]
    }
  }
}

4.3.3 关于取反
GET /wdqy151/test/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "age": 28
          }
        }
      ]
    }
  }
}

4.4 高亮显示
#查询出来的单字展现为红色

GET /wdqy151/test/_search
{
  "query": {
    "match": {
      "name": "雪"
    }
  },
  "highlight": {
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fields": {
      "name":{}
    }
  }
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++模版初阶】——我与C++的不解之缘(七)
  • 舒适度和音质再升级,南卡OE Pro2以标杆级实力,体验革命性提升!
  • 【VB6|第27期】如何在VB6中使用Shell函数实现同步执行
  • USB通信协议基础概念
  • ROADM(可重构光分插复用器)-介绍
  • YOLOv5: 从0开始搭建环境进行模型训练
  • 传统CV算法——基于Opencv的多目标追踪算法
  • 【盖世汽车-注册安全分析报告】
  • 亿发:中小型制造企业数字化转型典型场景、痛点、解决方案
  • 2024 数学建模高教社杯 国赛(A题)| “板凳龙”舞龙队 | 建模秘籍文章代码思路大全
  • 理解Sigmoid激活函数原理和实现
  • 【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十六)
  • Kafka Broker处于高负载状态(例如消息处理量大或系统资源不足),无法及时响应消费者的请求
  • 【C++高阶】深入理解C++智能指针:掌握RAII与内存安全的利器
  • 个股场外期权怎么交易?场外期权交易流程是怎样的?
  • 【391天】每日项目总结系列128(2018.03.03)
  • 2017届校招提前批面试回顾
  • Android 控件背景颜色处理
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • exif信息对照
  • Hexo+码云+git快速搭建免费的静态Blog
  • Javascript设计模式学习之Observer(观察者)模式
  • Java小白进阶笔记(3)-初级面向对象
  • LeetCode18.四数之和 JavaScript
  • vue-loader 源码解析系列之 selector
  • Vue组件定义
  • 闭包--闭包之tab栏切换(四)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 微信小程序填坑清单
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​如何防止网络攻击?
  • (33)STM32——485实验笔记
  • (C++)八皇后问题
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计高校学生选课系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法)Travel Information Center
  • (五)activiti-modeler 编辑器初步优化
  • (转)关于多人操作数据的处理策略
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .Net IE10 _doPostBack 未定义
  • .net 调用海康SDK以及常见的坑解释
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • @SentinelResource详解
  • [001-03-007].第07节:Redis中的管道
  • [20170713] 无法访问SQL Server
  • [20171113]修改表结构删除列相关问题4.txt
  • [AIGC 大数据基础]hive浅谈