离线 HTML 文档的 Javascript 可查询索引



我之前发布了一个类似的问题,但我认为我没有很清楚地解释我的要求。 基本上,我有一个 .NET 应用程序可以写出一堆 HTML 文件......我还希望此应用程序为这些 HTML 文件编制索引以进行全文搜索,以便 HTML 文件中的 javascript 代码可以查询索引(基于在 Web 浏览器中离线查看文件的用户输入的搜索词(。

这个想法是创建所有这些,然后复制到拇指驱动器或 CD-ROM 之类的东西上分发,以便在具有 Web 浏览器但不一定可以访问互联网的设备上查看。

我使用Apache Solr进行概念验证,但这需要运行Web服务器。

我最接近可行的解决方案是JSSindex(jssindex.sourceforge.net(,它使用Lush,但我们用户的环境是Windows,我们不想要求他们安装Cygwin。

看起来您的主要问题是使索引可以通过本地 HTML 访问。作弊方法:将索引放在JS文件中并从HTML页面引用。

var index=[ {word:"home", files:["f.html", "bb.html"]},....];

梯子可能是一个解决方案,因为它提供了现场索引。但是对于 1,000 个或更多文件,我不知道它的扩展效果如何......可悲的是,我不确定JS是这里的答案。我会选择一个自定义(编译的(应用程序,它既可以用作前端(HTML显示(,也可以用作后端(文本搜索和索引(。

使用 trie - 它们非常紧凑且非常可扩展 - 对于文本匹配非常方便。

有一篇很棒的文章涵盖了性能和设计策略。它们的启动速度比字典慢,但占用的空间要少得多,尤其是在处理较大的数据集时。

我会按如下方式处理它:

  1. 在 .NET 代码中索引所有对你很重要的关键字(跟踪其文档和偏移量(。
  2. 使用关键字的 alpha 排序列表生成您的 trie 结构,
  3. 使用有关可以找到它们所表示的单词的文档的信息来装饰终端节点。

      C
     A
    R  T [{docid,[hit offsets]},...]
    

您不必存储偏移量,但它允许您按邻近或顺序搜索单词。

您的 .net 人员可以构建 trie 示例代码。

生成映射需要一段时间,但是一旦完成并且您将其序列化为 JSON,您的 JavaScript 应用程序将对其进行比赛。

最新更新