Elasticsearch

目录

1.搜索是什么

1.1.概念

1.2.场景

1.2.1.互联网搜索

1.2.2. 站内搜索(垂直搜索)

2.数据库的弊端

2.1.站内搜索(垂直搜索):数量小,简单搜索,可以使用数据库、 

2.1.1存储问题。

2.1.2.性能问题

2.1.3.不能分词

2.2.互联网搜索

3.常见的搜索引擎

3.1.ElasticSearch与Solr比较

3.1.1.当单纯的对已有数据进行搜索时,Solr更快

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

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

3.1.4.总结

4.Elasticsearch的概念

5.Elasticsearch的使用场景

5.1.国外

5.2.国内

6.安装Elasticsearch

6.1.查看一下jdk的版本是否是1.8.0

6.2.下载和解压缩Elasticsearch安装包

6.3.Elasticsearch目录结构

6.4.启动Elasticsearch

6.5.访问Elasticsearch

7.什么是Kibana

8.安装Kibana

8.1.下载并解压Kibana

8.2.启动Kibana

8.3.访问Kibana

9.ES中常见的概念

10.ES常用API 接口

11.字段数据类型

11.1.字符串类型

11.1.1.text

11.1.2.keyword

11.2.数值类型

11.2.1.long

11.2.2.Interger

11.2.3.short

11.2.4.byte

11.2.5.double

11.2.6.float

11.2.7.half float

11.2.8.scaled float

11.3.日期类型

11.3.1.date

11.4.te布尔类型

11.4.1.boolean

11.5.二进制类型

11.5.1.binary

12.对于索引的基本操作

12.1.创建索引

12.1.1.创建索引并往索引中添加一条文档

12.1.2.创建索引---但是不添加数据

12.2. 查询索引

12.3.删除索引

12.4.查询索引的结构

13. 对于文档的基本操作

13.1.添加文档

13.1.1.添加指定id的文档

13.1.2.添加随机的文档

 13.2.根据id查询文档

13.3.根据id删除文档

13.4.修改文档

13.4.1.修改所有的列

13.4.2.修改部分列

13.5.根据其他条件查询

13.5.1.查询所有的文档

13.5.2.根据条件查询

13.5.3.将查询的条件封装成json数据

13.5.4.查询部分列

13.5.6.分页查询

13.5.7.范围查找

13.5.8.排序查询

 13.6.多条件查询(bool)

13.6.1.且

13.6.2.或

13. 6.3.取反(不等)

13.6.4. filter --过滤

14.高亮显示

15.Text和Keyword类型的区别


1.搜索是什么

1.1.概念

用户输入想要的关键词,返回含有该关键词的所有信息。

1.2.场景

1.2.1.互联网搜索

谷歌、百度、各种新闻首页

1.2.2. 站内搜索(垂直搜索)

企业 OA 查询订单、人员、部门,电商网站内 部搜索商品(淘宝、京东)场景

2.数据库的弊端

2.1.站内搜索(垂直搜索):数量小,简单搜索,可以使用数据库、 

2.1.1存储问题。

电商网站商品上亿条时,涉及到单表数据过大必须拆分表,数据库磁盘占用过大必须分库(mycat)。

2.1.2.性能问题

解决上面问题后,查询笔记本电脑等关键词时,上亿条数据 的商品名字段逐行扫描,性能跟不上。 

2.1.3.不能分词

如搜索笔记本电脑,只能搜索完全和关键词一样的数据,那么数据量小时,搜索笔记电脑电脑数据要不要给用户

2.2.互联网搜索

肯定不会使用数据库搜索,数据量太大,pb级别,我们可以使用搜索引擎来解决数据库搜索的问题:  搜索也是一款数据库,搜索可以进行分词搜索---搜索速度非常快

3.常见的搜索引擎

    ElasticSearch Solr

3.1.ElasticSearch与Solr比较

3.1.1.当单纯的对已有数据进行搜索时,Solr更快

Elasticsearch_第1张图片

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

Elasticsearch_第2张图片

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

Elasticsearch_第3张图片

3.1.4.总结

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相对开发维护者较少,更新太快,学习使用成本较高

4.Elasticsearch的概念

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

5.Elasticsearch的使用场景

5.1.国外

维基百科,类似百度百科,网络七层协议的维基百科,全文检索,高亮,搜索推荐

Stack Overflflow(国外的程序讨论论坛),相当于程序员的贴吧.遇到it问题去上面发帖,热心网友下面回帖解答。

GitHub(开源代码管理),搜索上千亿行代码.电商网站,检索商品日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK术,elasticsearch+logstash+kibana

商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java编程思想》的监控,如果价格低于27块钱,就通知我,我就去买。

BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。

5.2.国内

百度搜索,第一次查询,使用es

OAERP系统站内搜索。

6.安装Elasticsearch

6.1.查看一下jdk的版本是否是1.8.0

安装JDK,至少1.8.0以上版本

java -version--查看版本

6.2.下载和解压缩Elasticsearch安装包

下载地址:https://www.elastic.co/cn/downloads/

历史版本下载: https://www.elastic.co/cn/downloads/past-releases/

6.3.Elasticsearch目录结构

Elasticsearch_第4张图片

6.4.启动Elasticsearch

解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。
Elasticsearch_第5张图片

注意: 9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http协议 RESTful 端口。

6.5.访问Elasticsearch

Elasticsearch_第6张图片

7.什么是Kibana

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。
Elasticsearch、Logstash和Kibana这三个技术就是我们常说的ELK技术栈,可以说这三个技术的组合是大数据领域中一个很巧妙的设计。一种很典型的MVC思想,模型持久层,视图层和控制层。Logstash担任控制层的角色,负责搜集和过滤数据。Elasticsearch担任数据持久层的角色,负责储存数据。而我们这章的主题Kibana担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在Elasticsearch中的数据。

8.安装Kibana

8.1.下载并解压Kibana

下载地址:https://www.elastic.co/cn/downloads/

历史版本下载:https://www.elastic.co/cn/downloads/past-releases/

8.2.启动Kibana

解压后,进入 bin 文件目录,点击kibana-keystore.bat文件启动 Kibana服务 。

Elasticsearch_第7张图片

8.3.访问Kibana

浏览器访问 http://localhost:5601 进入 Dev Tools 界面
Elasticsearch_第8张图片

9.ES中常见的概念

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

Elasticsearch_第9张图片

10.ES常用API 接口

Elasticsearch_第10张图片

11.字段数据类型

11.1.字符串类型

11.1.1.text

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

11.1.2.keyword

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

11.2.数值类型

11.2.1.long

11.2.2.Interger

11.2.3.short

11.2.4.byte

11.2.5.double

11.2.6.float

11.2.7.half float

11.2.8.scaled float

11.3.日期类型

11.3.1.date

11.4.te布尔类型

11.4.1.boolean

11.5.二进制类型

11.5.1.binary

12.对于索引的基本操作

12.1.创建索引

12.1.1.创建索引并往索引中添加一条文档

PUT /demo1(索引名)/_doc(类型)/1(文档)
{
  "name":"李四",
  "age":18
}

注意:索引要小写,要不然会报错,put要大写

_doc 默认类型( default type), type 在 Elasticsearch 7.X  逐渐弃用, 因此产生一个默认类型进行代替

12.1.2.创建索引---但是不添加数据

PUT /demo2(索引名)
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "integer"
      }
    }
  }
}

mappings:映射

properties:属性

Elasticsearch_第11张图片

12.2. 查询索引

GET /_cat/indices?v

Elasticsearch_第12张图片

 12.3.删除索引

DELETE demo2(索引名)

Elasticsearch_第13张图片

12.4.查询索引的结构

GET demo1(索引名)

Elasticsearch_第14张图片

13. 对于文档的基本操作

13.1.添加文档

13.1.1.添加指定id的文档

PUT demo1/_doc/3
{
  "name":"张三",
  "age":12
}

Elasticsearch_第15张图片

13.1.2.添加随机的文档

POST demo1/_doc/
{
  "name":"完好无",
  "age":22
}

Elasticsearch_第16张图片

 13.2.根据id查询文档

GET /demo1/_doc/3

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

Elasticsearch_第17张图片

13.3.根据id删除文档

DELETE /demo1/_doc/3

DELETE/索引名/类型/指定id的值

Elasticsearch_第18张图片

Elasticsearch_第19张图片

13.4.修改文档

13.4.1.修改所有的列

PUT /demo1/_doc/2
{
  "name":"www",
  "age":11
}

Elasticsearch_第20张图片

Elasticsearch_第21张图片

弊端:这种修改必须要求指定所有列,如果只指定部分列,则原来其他列消失 

 13.4.2.修改部分列

 POST /demo1/_doc/2/_update
{
  "doc":{
    "name":"啊啊啊"
  }
}

Elasticsearch_第22张图片

Elasticsearch_第23张图片 13.5.根据其他条件查询

13.5.1.查询所有的文档

GET /demo1/_doc/_search

Elasticsearch_第24张图片

13.5.2.根据条件查询

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

GET /demo1/_doc/_search?q=name:李四---模糊查询

Elasticsearch_第25张图片

13.5.3.将查询的条件封装成json数据

PUT /user/_doc/1
{ "name":"刘民谐", "age": 18, "desc": ["有趣","幽默","开朗"]
}

PUT /user/_doc/2
{
  "name":"马老师", "age": 18, "desc": ["严谨","冷漠"]
 
}
PUT /user/_doc/3
{
  "name":"流油", "age": 3, "desc":["美丽","年轻","苗条"] }

match:匹配(会使用分词器解析(先分析文档,然后进行查询)) eq

GET /user/_doc/_search
{
  "query":{
    "match":{
      "name":"刘"
    }
  }

13.5.4.查询部分列

_source:过滤字段  

GET /user/_doc/_search
{
  "query":{
    "match":{
      "name":"刘"
    }
  },
  "_source":["name","age"]
}

Elasticsearch_第26张图片

 13.5.6.分页查询

form(从第几条开始查询)size(每页显示几条数据) 分页

GET /user/_doc/_search
{
  "query":{
    "match":{
      "age":18
    }
  },
  "_source":["name","age"],
  "from":1,
  "size":1
}

Elasticsearch_第27张图片

Elasticsearch_第28张图片

 13.5.7.范围查找

range:代表范围查找

GET /user/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":2---大于
      }
    }
  },
  "_source":["name","age"],
  "from":1,
  "size":1
}

Elasticsearch_第29张图片

13.5.8.排序查询

sort:排序  asc升序  desc降序

GET /user/_doc/_search
{
  "query":{
    "range":{
      "age":{
        "gt":2
      }
    }
  },
  "_source":["name","age"],
  "from":0,
  "size":5,
  "sort":[
      {
        "age":{
          "order":"desc"
        }
      }
    ]
}

Elasticsearch_第30张图片 13.6.多条件查询(bool)

13.6.1.且

must 相当于 and
GET /user/_doc/_search
{
  "query":{
    "bool":{
      "must":[
          {
            "match":{
              "name":"刘"
            }
          },
          {
            "match":{
              "age":18
            }
          }
        ]
    }
  }
}

Elasticsearch_第31张图片

13.6.2.或

should 相当于 or

GET /user/_doc/_search
{
  "query":{
    "bool":{
      "should":[
          {
            "match":{
              "name":"刘"
            }
          },
          {
            "match":{
              "age":18
            }
          }
        ]
    }
  }
}

Elasticsearch_第32张图片

13. 6.3.取反(不等)

must_not 相当于 not (... and ...)

GET /user/_doc/_search
{
  "query":{
    "bool":{
      "must_not":[
          {
            "match":{
              "age":18
            }
          }
        ]
    }
  }
}

Elasticsearch_第33张图片 13.6.4. filter --过滤

GET /user/_doc/_search
{
  "query":{
    "bool":{
      "filter":[
          {
            "range":{
              "age":{
                "lt":18
              }
            }
          }
        ]
    }
  }
}

Elasticsearch_第34张图片

14.高亮显示

GET /user/_doc/_search
{
  "query":{
    "match":{
      "name":"流"
    }
  },
  "highlight":{
    "pre_tags":"",
    "post_tags":"
",
    "fields":{
      "name":{}
    }
    
  }
}

Elasticsearch_第35张图片

15.Text和Keyword类型的区别

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

keyword: 它不会进行拆词操作

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

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

你可能感兴趣的:(elasticsearch,搜索引擎,大数据)