3

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

我们的想法是创建所有这些,然后复制到诸如拇指驱动器或 CD-ROM 之类的东西上,以便在具有 Web 浏览器但不一定可以访问 Internet 的设备上进行分发。

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

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

4

3 回答 3

2

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

var index=[ {word:"home", files:["f.html", "bb.html"]},....];
于 2012-05-11T22:51:32.930 回答
1

Ladders Could be a solution, as it provides on the spot indexing. But with 1,000 files or more, I dunno how well it'd scale... Sadly, I am not sure JS is the answer here. I'd go for a custom (compiled) app that served both as front-end (HTML display) and back-end (text search and indexing).

于 2012-05-21T18:45:17.363 回答
0

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

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

我将按如下方式处理它:

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

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

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

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

生成地图需要一些时间,但是一旦完成并且您将其序列化为 JSON,您的 javascript 应用程序就会通过它。

于 2012-05-21T23:51:11.960 回答