npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

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页之间),实际上存在大量的关键词即使被命中了也没有展现的机会。

利用返回结果受限的特征,对单字、单词没有交集的查询可以在内存倒排索引树中直接保存结果集,索引树并不会太大。

词组、短语匹配

  • 词组、短语匹配 - 全量求交集

二级索引

为常用词组建立二级索引集,冷门词使用单独索引集