lsearch
v0.0.1
Published
Node.js全文检索引擎
Downloads
3
Readme
Node.js全文检索引擎
倒排索引
采用简单、直接的多级嵌套引用链式结构来构建数据索引。通过预先构建的聚合多词组数据集,避免了由于实时计算文档交集产生的资源开销,支持海量数据的高效、精准定位。
一、 关键词分词
对用户输入的关键词组进行分词处理(对于属性分组通常不需要做分词)
二、分词排序
当同一关键词组在通过不同的顺序进行组合时会产生多种路径,如词组:a、b、c可以有多种组合顺序,对应的多种路径,在这种状态下需要为所有组合建立引用关系,导创建和更新索引的成本太高。
为了不产生路径分歧,需要对分词后的关键词进行排序,来确保路径的一致性。
弹性扩张
根据当前的表数据总量自动分裂为更小的数据集
跨表多字段排序
在进行跨数据库、集合、表的多字段排序是可以使用定期缓存策略,每间隔一段时间刷新一次。
对于非限定用户数据集进行排序时,通常对实时性要求并高,排序一次后可用供多个用户重复使用,这种状态下使用临时缓存机制是一个不错的解决方案。
字段排序可以通过预先构建的索引来实现,即在内存中提前对每个排序字段构建分区
交集算法
求多个文档集合的交集的算法是突破搜索引擎性能瓶颈最大的阻碍,因此一个高效的交集算法至关重要。
https://www.jianshu.com/p/109c82e19b3c
备选方案
使用拉链法+跳表对有序链表集合求交集
网格字典
深度优先匹配
搜索结果数量受限
建立索引时如果索引库文档树大于一定值时(如限量最大值为5000),则不再建立索引
按相关性进行预排序,然后提前相关的Top N个结果
匹配模式
单字、单词匹配
由于单字、单词查询不需要求交集,因此可以将Top N(N通常不会大于2000)直接放入内存倒排索引树,加快查询速度。
基于搜索引擎面向用户的特性,用户通常没有耐心对搜索结果连续翻阅超过50页,因此在单次查询中搜索引擎会限制返回结果数量(通常在50-100页之间),实际上存在大量的关键词即使被命中了也没有展现的机会。
利用返回结果受限的特征,对单字、单词没有交集的查询可以在内存倒排索引树中直接保存结果集,索引树并不会太大。
词组、短语匹配
- 词组、短语匹配 - 全量求交集
二级索引
为常用词组建立二级索引集,冷门词使用单独索引集