汇总——ElasticSearch篇
目录
全文检索
问题1:什么是全文检索?
基本概念:对**非结构化数据/结构化数据**先建立**索引**,再对索引进行搜索**文档**的过程叫做全文检索。
什么是非结构化与结构化数据?
- 非结构化数据:没有固定的格式的数据(html,word,excel)---没有固定长度,字段约束,描述,散列数据
- 结构化数据:有固定的格式的数据(如:数据库数据)---有固定长度(varchar(50)),字段类型,描述修饰数据
搜索算法:顺序扫描法、倒排索引法
- 顺序扫描法:
例如:
1)词典
2)没有目录--->查询一个词语,只能从第一页开始查询,一页一页的开始查询,直到查询到结果位置
软件:数据库(加索引)
- 倒排索引法:
例如:
1)词典
2)有目录--->查询一个词语,先查询目录,根据目录定位到词语所在的页码,直接查询到词语
问题2:数据库可以建索引,进行倒排索引搜索,为什么不能使用数据库进行大规模数据检索?
如有以下数据表:
数据库实现全文检索:
SQL:select * from table where name like '%医疗口罩%'
使用数据库检索会产生以下几种问题:
1. 全表扫描---速度非常慢
2. 字段中所有内容都需要挨个匹配---速度非常慢
3. 全文检索问题:关键词拆分问题
%医口罩% ---无法匹配任何一个结果
4. like模糊查询不走索引
问题3:什么是索引?
索引就是对一段文字进行分词,拆解后得到的单词,就叫做索引。
问题4:什么叫做文档?
文档就是一条结构化的数据(数据库一行数据)
1)数据结构体现:数据库一行数据
2)Java对象体现:JavaBean(key,value)key就是JavaBean属性
Java领域:没有搜索相关技术------>百花齐放------>各有各的规格------>lucecn定制Java搜索API接口规范------扩展(搜索,分词,索引库)
1. Lucecn是一套api,不是一个产品,可以使用lucecn开发一套搜索产品(单点故障,大规模数据维护......)
2. Solr是一个现成的产品(项目),只需把此项目部署到服务器即可实现搜索,solr的底层就是Lucecn
3. ElasticSearch是分布式搜索产品,只需把es部署到服务器即可实现搜索,es的底层也是Lucecn实现的
问题5:到底应用哪个产品呢?solr,es?
1)当单纯的对已有数据(数据不是实时的,规模不是很大:TB)进行搜索时,solr更快
*solr适合数据量较小的项目
*solr适合数据固定的项目
2)当建立实时索引时,solr会产生IO阻塞,查询性能差,ElasticSearch具有明显优势
*solr不适合有实时数据写入的场景
*es比较适合实时数据写入的场景
3)随着数据量的增加,Solr的查询速率会变得更低,而ElasticSearch却没有明显的变化
4)大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到ElasticSearch以后平均查询速度有了50倍的提升
总结:
- 二者安装都很简单;
- Solr利用zookeeper进行分布式管理,而ElasticSearch自身带有分布式协调管理功能;
- Solr支持更多格式数据,ElasticSearch只支持json文件格式;
- Solr官方提供的功能,而ElasticSearch本身更注重于核心功能,高级功能多由第三方插件提供;
- Solr在传统的搜索应用中表现好于ElasticSearch,但在处理实时搜索引用时效率明显低于ElasticSearch。
最终结论:
Solr是传统搜索应用的有力解决方案,但ElasticSearch更适用于新兴的实时搜索应用。
全文检索流程
一、索引库的建立
索引库创建流程:
索引库数据检索流程:
ElasticSearch介绍
1、ES基本概述
2、ES是什么?
1)ES=ElasticSearch简称,ElasticSearch是一个开源的**高扩展**的**分布式**全文检索引擎。
2)ElasticSearch也使用Java开发并使用**Lucene**作为其核心来实现所有索引和搜索的功能。但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变为简单。
ES是一个分布式的,高扩展的搜索框架,其架构图如下所示:
ES是面向文档型数据库,在这里一条数据就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:
{
"name" : "John",
"sex" : "Male",
"age" : 25,
"birthDate": "1990/05/01",
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
3、为什么要使用ES
- 从项目开发与维护出发
实际项目实战中,几乎每个系