Elasticsearch的使用

1.Elasticsearch的概述

1.1搜索是什么

概念:

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

场景:

1互联网搜索:谷歌、百度、各种新闻首页

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

1.2.数据库做搜索的弊端

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

问题出现:

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

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

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

1.2.2互联网搜索,肯定不会使用数据库搜索。数 据量太大。PB级。

我们可以使用搜索引擎来解决数据库搜索的问题:

搜索也是一款数据库,搜索可以进行分词搜索---搜索速度非常快 

1.3.常见的搜索引擎

1.3.1ElasticSearch与Solr比较

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

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

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

1.3.2.总结

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

2.Elasticsearch 是什么

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

3.Elasticsearch的使用场景 

3.1国外

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

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

GitHub(开源代码管理),搜索上千亿行代码。

电商网站,检索商品 日志数据分析,

logstash采集日志,ES进行复杂的数据分析(ELK技 术,elasticsearch+logstash+kibana)

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

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

3.2国内

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

OA、ERP系统站内搜索。

es:搜索的一款数据库,支持的数据格式json.----

4 .ES的安装

4.1、安装JDK,至少1.8.0_73以上版本,验证: java -version。

4.2、下载和解压缩Elasticsearch安装包,查看目 录结构。

https://www.elastic.co/cn/downloads/elasticsearchhttps://www.elastic.co/cn/downloads/elasticsearch

下载地址:

https://www.elastic.co/cn/downloads/https://www.elastic.co/cn/downloads/

历史版本下载:

https://www.elastic.co/cn/downloads/past-releases/https://www.elastic.co/cn/downloads/past-releases/

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

{
"name" : "DESKTOP-LNJQ0VF",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "nCZqBhfdT1-pw8Yas4QU9w",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" :
"757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-
beta1"
},
"tagline" : "You Know, for Search"
}

5.Windows安装Kibana

1、kibana是es数据的前端展现,数据分析时,可以方便地看到数据。作 为开发人员,可以方便访问es。

https://www.elastic.co/cn/downloads/https://www.elastic.co/cn/downloads/

历史版本下载:

https://www.elastic.co/cn/downloads/past-releases/https://www.elastic.co/cn/downloads/past-releases/

2、下载,解压kibana。

3、启动Kibana:bin\kibana.bat

4、浏览器访问 http://localhost:5601/http://localhost:5601/ 进入Dev Tools界面。像plsql一样支 持代码提示。 

5、发送get请求,查看集群状态GET _cluster/health。相当于浏览器访 问。 

6.ES中常见的概念

Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。 为 了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比

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

7.ES常用API接口

7.1基本操作

7.1.1创建一个索引,添加

PUT /索引名称/类型名称/1
{
   数据
}
创建索引并往索引中添加一条文档

(1)创建索引---但是不添加数据。
PUT /索引名/类型

PUT /qy151/_doc/1
{
  "name":"小源源",
  "age":22
}

7.1.2删除索引

DELETE /索引名

DELETE /qy150

7.1.3查询有哪些索引

GET /_cat/indices?v

GET /_cat/indices?v

7.1.4查询索引的结构

GET /qy151

7.1.5添加文档---记录

#必须指定id的值

PUT /qy151/_doc/2
{
  "name":"小懒懒",
  "age":21
}

 ## 不指定id

POST /qy151/_doc
{
  "name":"小灰灰",
  "age":20
}

7.1.6查询文档---id查询

查询的提交方式必须为GET

GET /qy151/_doc/2

 7.1.7删除文档

DELETE /qy151/_doc/8Wq7oIIBYQb6To7NZ89D

7.1.8修改文档  

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

PUT /qy151/_doc/2
{
  "name":"小红红",
  "age":19
}

PUT /qy151/_doc/2
{
  "age":20

 # 只修改部分列

POST /qy151/_doc/1/_update
{
  "doc":{
    "age":20
  }
}

8.根据其他条件查询

8.1查询所有文档

GET /qy151/_search 

8.2根据条件搜索

 GET /qy151/_search?q=name=源

8.3 查询的条件封装成json数据

 8.3.1根据名称查询

GET /user/_search
{
  "query": {
    "match": {
      "name": "高"
    }
  }
}

8.3.2只想查询部分列

GET /user/_search
{
  "query": {
    "match": {
      "name": "高"
    }
  },
  "_source": ["name"]
}

8.3.3分页查询

GET /user/_search
{
  "query": {
    "match": {
      "name": "高"
    }
  },
  "_source": ["name"],
  "from": 0,
  "size": 1
}

按年龄查询:

GET /user/_search
{
  "query": {
    "range": {
      "age":{
        "gt": 18
      }
    }
  },
  "_source": ["name","age","desc"],
  "from": 0,
  "size": 1
}

8.3.4按年龄排序

GET /user/_search
{
  "query": {
    "match": {
      "name": "高"
    }
  },
  "_source": ["name"],
  "from": 0,
  "size": 5,
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

9.多条件查询

9.1must

must====等价于and

GET /user/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
            "name": "高"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

9.2should

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

9.3must_not

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

10高亮显示

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值