文档章节

Elasticsearch 实战(一) - 简介

J
 JavaEdge
发布于 10/22 11:54
字数 1423
阅读 34
收藏 0
  • 官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统

基本等于没说,咱们慢慢看

1 概述

百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象) 百度 != 搜索,这是不对的

垂直搜索(站内搜索)

  • 互联网的搜索:电商网站,招聘网站,新闻网站,各种app
  • IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理,员工管理,搜索“张三”,“张三儿”,“张小三”;有个电商网站,卖家,后台管理系统,搜索“牙膏”,订单,“牙膏相关的订单”

搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息


2 数据库搜索

数据都是存储在数据库里面的 很自然的,如果从技术的角度去考虑,如何实现搜索,电商网站内部的搜索功能的话,就可以考虑,去使用数据库去进行搜索。

2.1 案例 - 电商系统的搜索

  • 搜索含有牙膏的商品
  • 在数据库中商品名称字段中存储有关键字

数据库来处理的话,不考虑数据库的全文索引什么的,假如商品有 1000万 个,那么基本上就要查找 1000 万次,且每次都需要加载商品的名称字段的整段字符串,并挨个寻找。

  • 每条记录的指定字段的文本,可能会很长 比如“商品描述”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描,懒判断说,你包不包含我指定的这个关键词(比如说“牙膏”)
  • 无法将搜索词拆分开来 尽可能去搜索更多的符合你的期望的结果,比如输入“生化机”,就搜索不出来“生化危机”

用数据库来实现搜索,是不太靠谱的。通常来说,性能会很差的。


3 全文检索 & Lucene

3.1 全文检索

3.1.1 场景:搜索“生化机”

  • 全文检索

(有可能是手抖打错了,本来是生化危机),但是期望需要出来右侧的 4条 记录

有 4条 数据 将每条数据进行词条拆分。如“生化危机电影”拆成:生化、危机、电影 关键词(拆分结果与策略算法有关) 每个关键词将对应包含此关键词的数据 ID 搜索的时候,直接匹配这些关键词,就能拿到包含关键词的数据 这个过程就叫做全文检索。而词条拆分和词条对应的 ID 这个就是倒排索引的的基本原理

对比数据库的缺陷

数据库里的数据,共有100万条,按照之前的思路,其实就要扫描100万次,而且每次扫描,都需要匹配那个文本所有的字符,确认是否包含搜索的关键词,而且还不能将搜索词拆解开来进行检索

利用倒排索引

进行搜索的话,假设100万条数据,拆分出来的词语,假设有1000万个词语,那么在倒排索引中,就有1000万行,我们可能并不需要搜索1000万次。 很可能说,在搜索到第一次的时候,我们就可以找到这个搜索词对应的数据。 也可能是第100次,或者第1000次

3.2 lucene

就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法

java开发的时候,引入lucene jar,然后基于lucene的API进行去进行开发就可以了 用lucene,我们就可以去将已有的数据建立索引,lucene会在本地磁盘上面,给我们组织索引的数据结构 另外的话,我们也可以用lucene提供的一些功能和API来针对磁盘上额

4 Elasticsearch的意义

我们可以使用 lucene 开发搜索服务,部署在一台机器上面,但是无法解决当数据量增大的时候出现的问题(图上右侧)。 那么 elasticsearch 就是解决这种场景的工具;

  • 自动维护数据的分布到多个节点的索引建立、检索请求分布到多个节点的执行
  • 自动维护数据的冗余副本,保证一些机器宕机了,不会丢失任何数据
  • 封装了更多的高级功能
  • 给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用
  • 复杂的搜索功能,聚合分析的功能,基于地理位置的搜多(距离我当前位置 1公里 以内的烤肉店)

参考

© 著作权归作者所有

J
粉丝 0
博文 56
码字总数 166504
作品 0
南京
私信 提问
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
2018/06/04
138
0
Elastic 南京Meetup 2018

时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 报名地址: http://elasticsearch.mikecrm.... 名额...

Medcl
2018/06/14
65
0
Elastic 南京Meetup 2018

时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 报名地址: http://elasticsearch.mikecrm.... 名额...

Medcl
2018/06/14
187
0
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
2018/06/04
39
0
Elastic Search原理简述

一、Elastic Search概述: 1.1 Elastic Search 简介 Elastic Search(ES)是一个基于Lucene构建的开源、分布式、RESTFul接口全文搜索引擎。ES还是一个分布式文档库,其中每个字段均是被索引的...

zhglance
02/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

BigDecimal 去后面无用的0的方法

BigDecimal a=new BigDecimal("0.1000"); System.out.println(a.stripTrailingZeros().toPlainString());...

xiaodong16
17分钟前
5
0
JAVA--高级基础开发

[集合版双色球] 十二、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码...

李文杰-yaya
昨天
16
0
聊聊rocketmq broker的CONSUMER_SEND_MSG_BACK

序 本文主要研究一下rocketmq broker的CONSUMER_SEND_MSG_BACK CONSUMER_SEND_MSG_BACK rocketmq/common/src/main/java/org/apache/rocketmq/common/protocol/RequestCode.java public class......

go4it
昨天
3
0
API常见接口(下)

system类 StringBuilder和StringBuffer 包装类 1.System类 (java.lang包中) 提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。 常用方法: public static long currentTimeMi...

Firefly-
昨天
4
0
MySQL系列:一句SQL,MySQL是怎么工作的?

对于MySQL而言,其实分为客户端与服务端。 服务端,就是MySQL应用,当我们使用net start mysql命令启动的服务,其实就是启动了MySQL的服务端。 客户端,负责发送请求到服务端并从服务端获取数...

杨小格子
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部