Add full text search for Wiki system with lunr.js

Sorry, this entry is only available in 中文.

  1. zthxxx:

    基于分词的搜索也有不方便的地方,如果搜索的字并未被分成词,那么就搜不到结果,比如,有一篇文章中有“桌面图标”这个词,我在搜索栏中搜索“图标”,就没有任何结果。这样,尤其是在代码比较多的 wiki 中,很容易丢失一些信息。从使用方面来说,分词的搜索体验还不如直接提取文章全文本加正则的搜索方式。

  2. Uranus Zhou:

    目前用非官方的lunr修改版中文分词实现可能是有点问题了,后面估计可以想办法改进,总归还是不完美的。
    这个 Wiki 系统文档都是在不同子目录的独立文件,如果搜索时全部遍历提取再匹配那就太麻烦了。

  3. zthxxx:

    我的博客里就是先把不同目录下的所有文章内容都提取纯文本,根据文章名做成 json,所有的内容放在一个json文件里,搜索的时候就不用再遍历,而是直接读取这个文件就好。由于是纯文本,所以博文多文件也很小,应该是比分词词表小很多。遍历过程也只是每发布一篇文章更新一次,对文件本身来说也类似与增量式更新。至于遍历过程麻烦,那反正都是机器干的事。

  4. LiarOnce:

    运行node search.js library search_index.json这段命令时提示找不到nodejieba包,但我已经安装了这个包,请问如何解决。

    module.js:472
    throw err;
    ^

    Error: Cannot find module ‘nodejieba’
    at Function.Module._resolveFilename (module.js:470:15)
    at Function.Module._load (module.js:418:25)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at /mnt/x/Users/LiarOnce.DESKTOP-NRV42PI/Desktop/wikis/assets/lunr.min.js:7:1058
    at Object. (/mnt/x/Users/LiarOnce.DESKTOP-NRV42PI/Desktop/wikis/assets/lunr.min.js:7:15224)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)

  5. LiarOnce:

    目前nodejieba问题解决了,但执行时发生了另一个错误:
    Invalid Wiki-document-directory or Search-index-file: library

  6. Uranus Zhou:

    是不是 library 目录不在运行的当前路径下?也可以用绝对路径

  7. LiarOnce:

    明白了,但是为什么根目录不行

  8. Uranus Zhou:

    根目录是什么意思?Wiki 文档目录参数不用 library 而是直接用 MDwiki 程序目录?那样目录参数可以用 “.” 或者绝对路径吧

  9. LiarOnce:

    还有一个问题:
    如何对标题进行搜索?

  10. Uranus Zhou:

    直接就支持的哦,搜索权重默认按 标题->关键字->内容 的优先级来。

  11. bing:

    大佬,有demo吗

  12. bing:

    看到了,原来是隐藏技能





*