Search 简介
什么时Search
Transwarp Search基于开源的Elasticsearch进行开发,在其架构的基础上进行了多种功能优化,并通过Esdrive实现了SQL交互方式。Transwarp Search是一个可扩展的分布式全文搜索和分析引擎。
在TDH中Search主要扮演两个角色。首先Search是Hyperbase全文索引的底层实现,其次也作为一个单独的服务。作为一个单独的服务,Search既是一个强大的搜索引擎,又是一个分布式的文件存储系统。
常见的应用场景有海量数据的存储和搜索、日志分析等。
Search的特点
List item
- 作为一个分布式的实时文档存储,Search独创的分层存储数据结构,以及支持内存/SSD/SATA的自动分层存储,并且利用堆外内存管理,具有相当优秀的单节点存储能力,集群对于PB级别的数据存储完全没有问题。除此之外还支持结构化、半结构化以及非结构化数据的存储分析。
- 除此之外,Search同时还是一个分布式实时搜索引擎。其对冷热数据分级进行存储,并能毫秒级的实现实时关键字检索。计算紧贴数据和索引,在亚秒级别完成在线分析等。
- 通过Inceptor来实现SQL引擎与搜索引擎的融合,实现以SQL方式创建索引和全文搜索。
- 具有极强的集群扩展性,能实现上千个节点的横向扩展。
Search的主要适用场景
- 文档数据库。Search可以作为一个分布式文档存储来存储半结构化、非结构化的数据,其功能和性能均优于MongoDB。
- 日志分析与监控。数据统计,以及日志类时间序列数据的存储和分析。
- 高聚合率的统计分析,如热词追踪。
- 作为一个搜索引擎来实现多条件模糊查询以及不指定列的全文搜索。
Search原理
数据模型
- Index(索引):Transwarp Search以 Index
为单位来组织数据(Document),一个Index下的数据常常有相似的特征。每个Index都有一个名字用于在操作中指代,Index名必须都为英文小写。并且这里的Index(索引)和Transwarp
HBase中的索引(本地索引、局部索引、全文索引等)不是一个概念。这里的索引是Transwarp Search中的数据对象。 - Type(分类):在一个 Index 下,您可以定义一个或多个 Type
。Type是Index的逻辑上的分类,分类逻辑完全由用户决定。例如存储员工信息的Index可以按部门分类(分为财务部Type、销售部Type、研发部Type等)也可以按办公地点分类(分为北京办公室Type、上海办公室Type、广州办公室Type等)。 - Document(文档):Document 是Transwarp Search中最基础的数据单元。例如,员工信息Index中一名员工的信息可以作为一个Document保存;商品信息Index中一件商品的信息也可以作为一个Document保存。Document以JSON格式存储。
- Field(字段):Document中的信息存储在字段(Field)中。
分词与索引
分词
分词的过程为:将一个文本块拆分为单独的词( term ),并标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”。分词的工作是由分词器完成的。
分词器有很多种类,比如英文分词器Standard、English或者中文分词器ik、mmseg。不同分词器会产生不同的分词效果,产生不同的索引,所以相同的查询使用不同的分词器会产生不同的结果。
倒排索引
Search使用倒排索引技术来实现全文搜索。倒排索引主要由单词词典和倒排文件两部分组成。
倒排索引会按照指定语法对每一个文档进行分词,然后维护一张表,列举所有文档中出现的单词以及它们出现的文档编号和出现频率。搜索时同样会对关键词进行同样的分词分析,然后查表得到结果。