我之前发布了一个类似的问题,但我认为我没有很清楚地解释我的要求。 基本上,我有一个 .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 - 它们非常紧凑且非常可扩展 - 对于文本匹配非常方便。
有一篇很棒的文章涵盖了性能和设计策略。它们的启动速度比字典慢,但占用的空间要少得多,尤其是在处理较大的数据集时。
我会按如下方式处理它:
- 在 .NET 代码中索引所有对你很重要的关键字(跟踪其文档和偏移量(。
- 使用关键字的 alpha 排序列表生成您的 trie 结构,
-
使用有关可以找到它们所表示的单词的文档的信息来装饰终端节点。
C A R T [{docid,[hit offsets]},...]
您不必存储偏移量,但它允许您按邻近或顺序搜索单词。
您的 .net 人员可以构建 trie 示例代码。
生成映射需要一段时间,但是一旦完成并且您将其序列化为 JSON,您的 JavaScript 应用程序将对其进行比赛。