什么是ElasticSearch?
专注于搜索的非关系型数据库
根据用户的搜索关键字,然后特定的算法,从互联网检索指定的信息反馈
搜索引擎框架
Lucence
开发语言是Java
提供了完整的索引和搜索引擎
不支持实时搜索,从创建索引到可以搜索的中间需要一定的时间
Lucence是一个框架,需要跟Java集成,熟练运用Lucence非常复杂
Apache Solr
开发语言是Java,是Apache基于Lucence开发的一个全文搜索的服务
支持通过HTTP利用XML加载到一个搜索集合中
缺点建立索引时搜索效率下降,实时索引搜索效率不高
Elasticsearch
分布式,基于Lucence构建的RESTful搜索引擎
支持通过HTTP使用JSON 进行数据检索
能够对大容量的数据进行实时维护
Elasticsearch和Solr
在Solr之前提出了实时搜索(Near Real Time Search)
如果使用的是JSON那么Elasticsearch是很好的选择,Solr使用的是schema.xml和solrconfig.xml都有很好的文档记录
Solr用于文本搜索,Elasticsearch用于分词和过滤,而不一定是文本搜索
两者都是功能丰富的搜索引擎,Elasticsearch使用更简单,Solr上手需要更多的工作和知识
我们需要的数据在数据库中都有,为什么还要使用搜索引擎?
搜索引擎可以更好搜索非结构化的文本
索引维护的方面,一般我们不会用数据库存文本字段,新增和修改都需要重新构建索引非常的麻烦
当搜索数量变大的时候,适合使用搜索引擎
需要灵活的全文搜索
Elasticsearch结构
数据库 - 索引(index)
表 - 类型(type)
数据行 - 文档(document)
数据列 - 字段(field)
约定 : 一个索引只能有一个类型,并且类型名固定为(_doc)
倒排索引
将数据添加到es中,就开始执行
对数据类型为text的字段进行分词,得到词根
将词根存到倒排索引表中,并与文档映射起来通过ID
用户搜索关键字,es对这些关键字从倒排索引里进行匹配
匹配成功获取文档ID集合,然后根据文档ID去查询内容并返回