分布式搜索引擎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服务器的配合使用的集合称为集群。
节点:形成集群的每个服务器称为节点。
分布式搜索引擎Elasticsearch_第1张图片
Shard:分片,数据可以分为较小的分片。每个分片放到不同的服务器上。
Replia:副本,为提高查询吞吐量或实现高可用性,副本是一个分片的精确复制,每个分片可以有零个或多个副本。
全文检索:在一篇文档中搜索要的内容,如果想查的数据快,肯定不是基于mysql的那种索引方式—基于倒排索引,实现的全文检索。

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

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

分布式搜索引擎Elasticsearch_第2张图片

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.官方没有提供一个特别好的客户端

  • postman
  • elasticsearch-head(第三方,node写的:node环境)
# 安装
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# 启动
npm run start

配置跨域:修改es的配置

http.cors.enabled: true
http.cors.allow-origin: "*"

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

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

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
}

五、映射管理

在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"}

你可能感兴趣的:(数据库,搜索引擎,分布式,elasticsearch)