lucene全文检索与数据库查询的区别

性能上

数据库:比如我要查找某个商品,根据商品名,比如:

select * from product where doctname like %keywords%

这样查询的话对于数据量少是可以的,可是一旦你的数据量巨大几万几十万的时候,你的性能将会极大的减弱。

lucene(全文检索):建立一个索引库,一次建立多次使用。在索引库里面会把所有的商品名根据分词器建立索引,就好比新华字典,索引对应document,比如输入衬衫,那么就会根据索引迅速的翻到衬衫对应的商品名,时间迅速,性能很好。

相关度排序

数据库:数据库要实现该功能也是可以的,可是需要改变表的结构,添加一个字段,然后该字段用于排名,最后查询的时候order by 一下.

lucene:查询出来的document都有一个算法(得分),根据算法可以计算得分,得分越高的排名越靠前,比如百度搜索一个东西,一般排名靠前的得分越高,得分通过算法,可以人工控制,比如百度推广,企业给的钱多得分自然高,因此排名靠前

准确性

数据库:

select * from product where doctname like %ant%

搜索出来的可以是plant,aplant,planting等等,准确性不高

lucene:它是通过索引查询的,就好像你查字典一样,准确性比数据库的模糊查询高许多

lucene和elasticsearch的关系

elasticsearch是基于lucene实现的分布式全文检索系统,解决了lucene存储可伸缩问题,高可用问题,读写负载均衡问.提供了更多高级功能如:复杂的
搜索功能,聚合分析功能,基于地理位置搜索,rest api,多种语言客户端开发的api等

Elasticsearch的特点

(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司

(2)Elasticsearch是将全文检索、数据分析以及分布式技术,合并在了一起,才形成数据分析软件,分布式数据库

(3)elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口,对用户而言,简单易用,数据量不大,操作不是太复杂

(4)Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能,如全文检索,同义词处理,相关度排名,复杂数据分析,支持PB级数据,海量数据的近实时处理;

相关概念

(1)Near Realtime(NRT):近实时,从写入数据到数据可以被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析可以达到秒级

(2)Cluster:集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,也可以只有一个节点

(3)Node:节点,集群中的一个节点,节点也有一个名称,默认是随机分配的,在执行运维管理操作的时候,节点名称很重要,默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,一个节点也可以组成一个elasticsearch集群

(4)Document和field:文档,es中的最小数据单元,一个document相当于数据库的一行数据,用JSON数据结构表示;每个index下的type中,都可以去存储多个document。一个document里面有多个field,每个field就是一个数据字段。

(5)Index:相当于数据库中的数据库实例。

(6)Type:类型,相当于数据库中的表。

(7)shard:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个分片shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升读写性能。每个shard都是一个lucene index。

(8)replica:任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,因此可以为每个shard创建多个replica副本。replica可以在shard故障时提供备用服务,保证数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。


3、elasticsearch核心概念 vs. 数据库核心概念

Elasticsearch 数据库
Document
Type
Index