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<mark>自身带有分布式协调管理功能 </mark>
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":"<font color='red'>",
    "post_tags":"</font>",
    "fields":{
      "条件字段名":{}
    }
  }
}

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

  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naaaaa.a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值