我们知道搜索大体分为两步,首先对文档集做索引,然后处理查询,做好的索引可能会使用很长一段时间。
对于中文搜索,做索引时要对文档分词,处理查询时要对查询串分词。
问题是,如果做索引时的分词结果,不同于查询处理时的分词结果,那还能找到吗?
举个例子,做索引时,“区块链”一词不太流行,词典里没有,结果分词算法分成了“区块”和“链”两个词,存入数据库的也是这两个词。
后来过了几个月(甚至年),该词越来越流行,于是网站管理员把它添加到了“热门词典”里以便提升分词质量。从这一刻起,新来的查询若包含“区块链”,将作为单个词保留下来。不幸的是,除非有包含该词的新文档加入,否则因为数据库里根本没有这个词导致搜索失败,即使存在一些旧文档包含该词。
请问这种困境该如何应对呢?当然,一种做法是把“区块”和“链”这俩词重新做索引……这个太不方便了,有没有更好的办法?
求思路,谢谢!
前面啰嗦得太多,我再把问题精简一下:
如何设计词索引,使得 —— 若 将来 改进了分词算法,在不重建索引的情况下,搜索结果也能改进?
例如,当词典没有“区块链”一词时,搜索结果可能包含大量“区块”和“链”两个词的文档;当把“区块链”加入词典后,在不重建索引的情况下,立即就能找到包含“区块链”的文档,排名在包含“区块”和“链”两个词的文档前面。