notdeft支持搜索中文的方法

不知道有没有人用notdeft,我尝试了下,结合xapian搜索很快,但是发现搜索不了中文.经过查找文档,找到了支持搜索中文的方法.

修改notdeft-xapian.cc文件中,把TermGenerator和QueryParser对象增加FLAG_CJK_NGRAM标记,重新编译,重建索引即可.

doIndex函数中

    Xapian::TermGenerator indexer;
    indexer.set_flags(Xapian::QueryParser::FLAG_CJK_NGRAM);

doSearch函数中

    Xapian::QueryParser qp;
    ...
    query = qp.parse_query(queryArg.getValue(), flags | Xapian::QueryParser::FLAG_CJK_NGRAM);
6 个赞

notdeft感觉挺酷,不过没太懂跟deft的区别。是1.搜索效率更高2.支持文件链接吗?

1.用上xapian后搜索比deft快,100个org文件,搜索几乎感觉不到什么延迟,更多文件的没测试过,毕竟xapian是C++写的搜索引擎,肯定是比deft快;

2.支持更多的查询条件,包括AND,OR,NOT,只搜文件名,只搜#+KEYWORDS关键词,只搜#+TITLE标题等;

3.支持多个搜索buffer;

4.支持设置多个目录;

文件链接指什么,软链接文件?

3 个赞

org文件多的时候,deft始终会卡那么一下的,现在新版本的deft为了不卡顿,可以设置两个变量:

deft-file-limit 限制显示的文件数量

deft-filter-only-filenames只搜索文件名

但是用上notdeft+xapian,可以不需要用deft了,不用xapian的话,效率和deft一样.

1 个赞

感谢,我打算尝试一下,链接是指org里的deft://链接。

支持的,https://tero.hasu.is/notdeft/#org13d6fd0

(require 'notdeft-org) 后支持deft链接

[[deft:notdeft.org]]
[[deft:notdeft-homepage.org::*Note Archival]]
[[deft:notdeft-homepage.org::#capture-protocol]]
1 个赞

這兩天才安裝好,沒發現不能搜索中文啊。直接可以搜索中文。

但是不能直接生成 中文的文件名? 比如,搜索「中文測試」,發現沒有內容,按回車自動新建文件,文件名是「deft–2019-12-17-09-29-15.org」,文件內容是「中文測試」。這個能設置嗎?英文文件名正常。

根據 https://www.gtrun.org/post/my-agenda/

先設置這樣:

  • 支持中文搜索 (setenv “XAPIAN_CJK_NGRAM” “1”)

原来可以用setenv设置XAPIAN_CJK_NGRAM,那就不用改代码了.

自动创建中文文件名的问题,刚刚看了下el文件,看得不是很明白,但是尝试设置notdeft-notename-function后,搜索回车,可以创建中文文件名,而不是Deft--日期.org的文件名.

(setq notdeft-notename-function '(lambda (str) str))

可能是默认函数对中文处理得不好导致,所以重新设置一个返回str本身的函数.

1 个赞

厲害,完美解決!謝謝!

notmuch notdeft 主要是搜索快。 如果你用notmuch 就能看出点项目名的意思。 README 也提到了。 不过搜索文本文件,一个 counsel-ag 也够了

有没有人发现,notdeft显示不全?

才发现:

如果不输入搜索,notdeft只显示100条。

如果输入搜索,也没有搜索全,只有几分之一。

以前数据少,没有发现。

确实搜索不全,要把文件中的中文和英文用空格分开,然后调用notdef-reindex,才能搜索出来。

有个变量notdeft-xapian-max-results 默认值是100,可能和这个也有关系

设置这个notdeft-xapian-max-results为0后好像搜索正常了,不是中英文空格的问题。

1 个赞

成功,搞定,厉害!

授人以鱼,再请问大佬如何找到notdeft-xapian-max-results这个参数,我搜帮助,也只有两三次提到,并且也没有提到要设为0呢?

中文搜索不全这个问题以前就有发现过,当时以为是xapian的问题,就没去管了,一直用ag或者直接打开想看的文件。

这次你提到了,我就又试了一下,发现有的中文并不需要加空格也能搜索到,想到deft因为文件太多卡顿,后来有加过一个控制最多文件显示数量的变量来做优化,所以我猜测是不是notdeft是不是也有什么相关的变量。

C-h v找 notdeft的变量时,就看到这个notdeft-xapian-max-results,刚好又是100。

(defcustom notdeft-xapian-max-results 100
  "Maximum number of Xapian query results.
\(I.e., '--max-count' for `notdeft-xapian-program'.)
No limit if 0."
  :type 'integer
  :safe 'integerp
  :group 'notdeft)

描述中No limit if 0,于是设置成0,中文搜索就都有了。

这个变量可能是指所有文件中搜索结果出现的次数,当一个文件搜索到多次,多个文件,就很容易超过100了。

其实如果直接去看插件源码,更容易发现这个变量。

经验之谈,厉害,佩服,谢谢指点。

发现这里的人个个都是人才,好好哦

这次重新看文档:https://tero.hasu.is/notdeft/#org1049f0d 学会了前缀搜索,在每个org文件中指定#+TITLE和#+FILETAGS后,搜标题和tag很方便。

是在第一行,NOTDEFT:后面输入「 title: 搜索词」吗?