每个Document都是由多个field组成,每个field中包含一系列的词语,构建索引的目的是为了加快检索的速度,根据映射关系方向的不同,索引可以分为:
倒排索引(index)倒排索引存储了从单词到DocID的映射关系,形如:词-->(Doc1,Doc2,...,DocN)倒排索引主要用在检索中,它能快速的定位用户查询到关键字对应的Document。
正排索引特性:
储从DocID到field的映射关系:DocID→(term1, term2,...)
类型分类:
单值attribute:固定长度,查找效率高,支持更新。
多值attribute:长度可变,查找效率相较于单值更慢,不支持更新。
正排索引主要是在查询到了某个Document后,根据docid值能快速获取到其attribute用来统计、排序、过滤中。
支持数据类型:
数值类型:INT8, UINT8, INT16, UINT16, INTEGER, UINT32, INT64, UINT64
浮点类型:FLOAT, DOUBLE
文本类型:STRING
INT8(8位有符号数字类型),UINT8(8位无符号数字类型)、INT16(16位有符号数字类型)、UINT16(16位无符号数字类型)、INTEGER(32位有符号数字类型)、UINT32(32位无符号数字类型)、INT64(64位有符号数字类型)、UINT64(64位无符号数字类型)、FLOAT(32位浮点数)、DOUBLE(64位浮点数)、STRING(字符串类型)多值的attribute只是一个field中可能出现数量不确定的单值attribute,引擎对上述的单值类型attribute都支持对应的多值attribute(例如multi_int8,multi_string)。
摘要(summary)的存储形式与attribute类似,但是summary是将一个Document对应的多个field存储在一起,并且建立映射,所以能很快从docid定位到对应的summary内容。summary主要是用于结果的展示,一般而言summary的内容都比较大,对于每次查询而言不适合取过多的summary,只有最终需要展示结果的Document会取到对应的summary。由于summary过大,引擎在存储summary时提供压缩的机制,在schema中配置summary压缩,那么引擎在存储时会用zlib压缩后再存储,读取时引擎会先解压,再返回给用户。