【问题标题】:Full-text search for static HTML files on CD-Rom via javascript通过 javascript 对 CD-Rom 上的静态 HTML 文件进行全文搜索
【发布时间】:2025-11-28 19:30:01
【问题描述】:

我将在 CD-Rom 上提供一组静态 HTML 页面;这些页面需要在没有任何互联网访问的情况下完全可见。

我想为这些页面的内容提供全文搜索(类似 Lucene),它应该可以从 CD-Rom 中“正常工作”,而无需在客户端计算机上安装软件。

在 javascript 中实现搜索引擎将是完美的解决方案,但我很难找到任何看起来可靠/当前/流行的...?

我确实找到了这些: + jsFind + js-search

但这两个项目似乎都相当不活跃?

除了特定的 javascript 搜索引擎之外,另一种解决方案是能够从 javascript 访问本地 Lucene 索引:索引本身将使用 Lucene 构建并与 HTML 文件一起复制到 CD-Rom。

编辑:自己构建(见下文)。

【问题讨论】:

    标签: javascript search lucene full-text-search


    【解决方案1】:

    最初的问题是在 09 年提出的

    截至 14 年,lunr.js 被描述为:

    在浏览器中进行简单的全文搜索

    请参阅 DemoGithub repo


    更新 2016 年 9 月:轻量级模糊搜索,在 JavaScript http://fusejs.io/

    【讨论】:

      【解决方案2】:

      Fullproof 是一个漂亮的小型 javascript 库,可以为您充当文本搜索。它在这种情况下很有用,但在“thick-javascript-webpage”模型中也很有用。

      【讨论】:

        【解决方案3】:

        其实我自己做的。

        现有的解决方案(我能找到)没有说服力。

        我希望能够搜索显示为一页的很长的树(ul/li/ul...);它包含 5000 多个项目。

        在一个页面上显示这么长的树听起来有点奇怪,但实际上折叠/展开它比单独的页面更直观,而且由于我们离线,下载时间不是问题(解析时间是,不过,Chrome 很棒 ;-)

        现代浏览器(无论如何都是FF和Chrome)提供的“搜索”功能有两个大问题:它们只搜索页面上的可见项,并且无法搜索不连续的单词。

        我希望能够搜索折叠的项目(在屏幕上不可见);我想在搜索“一三”时找到“一二三”(就像谷歌/Lucene);我只想打开包含找到的项目的树的分支。

        所以,我所做的是:

        1. 创建单词的倒排索引列表中项目的 ID(通过 xslt)(文档中大约 4500 个唯一单词)
        2. 将此索引转换为一堆 javascript 数组(一个单词 = 一个数组,包含 id)
        3. 搜索时,将搜索词表示的数组相交
        4. 第 3 步返回一个 ID 数组,然后我可以打开/突出显示该数组

        它完全符合我的需要,而且速度非常快。更好的是,因为它从独立的“索引”(id 数组)中搜索,所以它甚至可以在浏览器中没有加载列表时进行搜索!

        【讨论】:

        • 我们可以看看这方面的任何例子吗?
        • 你有这个公开的吗?
        【解决方案4】:

        看看 CLucene -

        http://sourceforge.net/projects/clucene

        http://clucene.git.sourceforge.net/git/gitweb.cgi?p=clucene/clucene;a=summary

        将 C++ 源代码编译到控制台或 Win32 可执行文件中,也可以使用 Lucene 技术(我假设您更愿意坚持使用)。

        【讨论】:

          【解决方案5】:

          我知道很多人使用 Java 编写 CD 搜索小程序。我有一份略显陈旧的各种免费和商业程序列表,位于 Search Tools for CD-ROMs and DVDs

          【讨论】:

            【解决方案6】:

            Zoom Search Engine 可以做到这一点。

            我没用过CD版,但是我的网站用的是PHP版,效果很好。

            【讨论】:

            • 我确实看过,谢谢,但适应我的特定需求似乎相当复杂。