ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Elasticsearch入门

2021-10-27 14:34:03  阅读:209  来源: 互联网

标签:入门 数据 Lucene 搜索 Elasticsearch Solr 分布式


简介

Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Elasticsearch官网:https://www.elastic.co/cn/products/elasticsearch

功能

  • 分布式的搜索引擎
    分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索
    搜索:百度、谷歌,站内搜索

  • 全文检索
    提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能

  • 数据分析引擎(分组聚合)
    电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访
    问量排名top3的新闻板块是哪些

  • 对海量数据进行近实时的处理
    海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自
    然而然就可以实现海量数据的处理
    近实时:Elasticsearch可以实现秒级别的数据搜索和分析

特点

  1. 安装方便:没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群

  2. JSON:输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便

  3. RESTful:基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行

  4. 分布式:节点对外表现对等(每个节点都可以用来做入口) 加入节点自动负载均衡

  5. 多租户:可根据不同的用途分索引,可以同时操作多个索引

  6. 支持超大数据: 可以扩展到 PB 级的结构化和非结构化数据 海量数据的近实时处理

使用场景

常见场景

  1. 搜索类场景
    比如说电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。

  2. 日志分析类场景
    经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查
    询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了该方案。

  3. 数据预警平台及数据分析场景
    例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消
    息,通知用户购买。
    数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top 10关注度、
    评论数、访问量的内容等等。

  4. 商业BI(Business Intelligence)系统
    比如大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信
    息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。
    Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。

常见案例

  • 维基百科、百度百科:有全文检索、高亮、搜索推荐功能

  • stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。

  • github:从上千亿行代码中搜索你想要的关键代码和项目。

  • 日志分析系统:各企业内部搭建的ELK平台。

主流全文搜索方案对比

Lucene、Solr、Elasticsearch是目前主流的全文搜索方案,基于倒排索引机制完成快速全文搜索。

  • Lucene
    Lucene是Apache基金会维护的一套完全使用Java编写的信息搜索工具包(Jar包),它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用Lucene时仍需要我们自己进一步开发搜索引擎系统,例如数据获取、解析、分词等方面的东西。

    注意:Lucene只是一个框架,我们需要在Java程序中集成它再使用。而且需要很多的学习才能明白它是如何运行的,熟练运用Lucene非常复杂。

  • Solr
    Solr是一个有HTTP接口的基于Lucene的查询服务器,是一个搜索引擎系统,封装了很多Lucene细节,Solr可以直接利用HTTP GET/POST请求去查询,维护修改索引。

  • Elasticsearch
    Elasticsearch也是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。采用的策略是分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

搜索引擎排行 https://db-engines.com/en/ranking/search+engine

区别

Solr和Elasticsearch都是基于Lucene实现的。但Solr和Elasticsearch之间也是有区别的

  1. Solr利用Zookpper进行分布式管理,而Elasticsearch自身带有分布式协调管理功能

  2. Solr比Elasticsearch实现更加全面,Solr官方提供的功能更多,而Elasticsearch本身更注重于核心功能, 高级功能多由第三方插件提供

  3. Solr在传统的搜索应用中表现好于Elasticsearch,而Elasticsearch在实时搜索应用方面比Solr表现好

版本介绍

Elasticsearch 主流版本为5.x , 6.x及7.x版本

7.x 更新的内容如下

  1. 集群连接变化:TransportClient被废弃

  2. ES数据存储结构变化:简化了Type 默认使用_doc

  3. ES程序包默认打包jdk:以至于7.x版本的程序包大小突然增大了200MB+, 对比6.x发现,包大了200MB+, 正是JDK的大小

  4. 默认配置变化:默认节点名称为主机名,默认分片数改为1,不再是5。

  5. Lucene升级为lucene 8 ; 查询相关性速度优化:Weak-AND算法
    es可以看过是分布式lucene,lucene的性能直接决定es的性能。lucene8在top k及其他查询上有
    很大的性能提升。

    weak-and算法 核心原理:取TOP N结果集,估算命中记录数。
    TOP N的时候会跳过得分低于10000的文档来达到更快的性能。

  6. 间隔查询(Intervals queries): intervals query 允许用户精确控制查询词在文档中出现的先后关系,实现了对terms顺序、terms之间的距离以及它们之间的包含关系的灵活控制。

  7. 引入新的集群协调子系统 移除 minimum_master_nodes 参数,让 Elasticsearch 自己选择可以形成仲裁的节点。

  8. 7.0将不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超出单机处理的最大内存限制时会被截断。
    设置indices.breaker.fielddata.limit的默认值已从JVM堆大小的60%降低到40%。

  9. 分片搜索空闲时跳过refresh
    以前版本的数据插入,每一秒都会有refresh动作,这使得es能成为一个近实时的搜索引擎。但是当没有查询需求的时候,该动作会使得es的资源得到较大的浪费。

软件兼容

单节点部署

Elasticsearch是一个分布式全文搜索引擎,支持单节点模式(Single-Node Mode)集群模式(Cluster Mode)部署,一般来说,小公司的业务场景往往使用Single-Node Mode部署即可

标签:入门,数据,Lucene,搜索,Elasticsearch,Solr,分布式
来源: https://www.cnblogs.com/mingpingyao/p/15422203.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有