搜索引擎有哪两种检索(常见的两种搜索引擎)

前沿拓展:

搜索引擎有哪两种检索

一般有分录目录检索法和关键词检索法


最近在做一个DMP产品,对ES依赖比较深刻,所以要好好学一下ES。

ES是什么

ES是一个分布式免费开源搜索和分析引擎。

逻辑上,ES以索引的形式对外提供服务。一个索引(Index)由多个分片(Shard)组成;一个分片就是一个Lucence搜索引擎,由多个分段(Segment)组成;一个分段由多个文档(Document)组成,这个文档是JSON格式;一个文档由很多个字段(Field)组成;一个字段的数据由很多分词(Term)组成。

我的理解:每个分段针对文档除了维护一个倒排索引结构,还会维护一个正排索引结构,原因是除了支持全文检索外,也得支持根据ID精确查找文档的能力。

ES能做什么

作为搜索引擎,提供全文检索和精确查询功能,这就等同于支持了批量读写和随机读写的能力;作为分析引擎,在检索的基础之上在提供一些聚合、趋势分析能力。

所有这些的基础都是将文档能够索引化,区别于其他存储引擎,做到了所有字段的、所有数据的索引化。构建索引的过程就包含了数据分词、数据归一、建立倒排索引;检索的过程对应也包含了近似查询和精确查询。

归结起来就是写入数据建立索引,检索数据使用索引。

ES如何写入

物理上,ES有多种节点:

主节点,维护全局性的数据,比如元数据管理和全局广播通知;数据节点,存储和检索数据;协调节点,写操作是路由主分片所在的节点,读操作是聚合最终结果;任何节点都可以是协调节点。

除此之外,分布式存储系统基于高可用的考虑,都会建立多副本机制。ES写入一个文档时,都会首先写入到主分片所在的节点,之后再同步到其他副分片;每次写入,为了能够实时生效,都会刷新索引创建一个新的分段,并对所有数据做分词处理,之后构建倒排索引。

提高写入效率

首先考虑硬件上的投入,索引的构建和检索分别是高CPU和高IO的操作;另外一个思路就是可用性和时效性换取插入效率,说白了就是:

写入之前副本数为零,写入后在增加副本数;加大refresh的时间间隔;没有查询场景的字段,明确不要分词建索引。ES如何查询

检索和写入不同,每个副分片都可以支持查询,这也是多副本带来的高并发高吞吐的优势。

协调节点接收到检索指令后,会转发到所有分片所在的节点,找出数据所在的节点,再从每个数据节点把数据获取并归集,最后返回数据。在这过程中,每个节点都会考虑是否需要做分词和近似查询,这个比较耗时,也影响最终的输出。

提高查询效率

检索分两种,GET和SEARCH。

GET就是根据ID来精确查询文档,直接定位到数据节点,不存在分发分词归集的过程,速度很快;SEARCH就是检索了,检索的速度依赖于是精确查询还是近似查询。精确查询就是根据精确值来匹配过滤,是就是不是就不是;近似查询会计算一个相关数,看看相似度多大。

出于效率考虑:

能用GET的不用SEARCH;能用精确查询(Filter)的,不用近似匹配(Query)。

拓展知识:

搜索引擎有哪两种检索

搜索引擎检索信息主要有(简单查询 )和(高级 )查询两种方式。 你打开 百度搜索 试试看就知道了