物书堂有分词和倒排索引,就是全文搜索引擎了,不管用的什么算法,或者只是搜索例句,还是搜索完整的文本,sqlite 的搜索引擎还包含分词的 bm25 评分(好用的前提是正确分词)。
我截图的这些就是倒排索引:
分词的作用介绍:
给定例句:
她会说一口流利的普通话
物书堂分词的结果:
她/会/说/一口/流利/的/普通/话
logovista 的分词是这样的(epwing 版本,明镜国语的 sqlite 版本我没有看到有虚拟表,应该只用于存储文本数据,也可能新版本变了,没看过):
她/会/说/一/口/流/利/的/普/通/话
她会/会说/说一/一口/口流/流利/利的/的普/普通/通话
logovista 的分词结果中很多冗余,这里的「通话」是容易出现问题的地方,假设用户搜索包含「通话」的例句,他实际上不会想看到包含「普通话」的例句,物书堂的分词结果没有这种问题,但 logovista 就有这些问题了,如果这种分词放到完整的文本中,错误的结果会更多。
一元二元分词也有优点,搜索结果不会漏,很适合古文搜索,各有权衡吧。
再介绍下三字及更多字的搜索,以「普通话」为例:
物书堂:「普通」+「话」的倒排索引做交集,搜索最长串(猜测)。
logovista:「普通」+「通话」的倒排索引做交集,二元分词。