站内搜索看起来很简单,两个字段、一个 like 查询就能跑起来。真正做起来才发现,中文需要分词,维吾尔语需要处理字母的不同写法,两个语言的排序规则又完全不同。

我先用了最笨的办法:把标题、摘要、正文全部拼成一个搜索列,查询时对关键词做一次归一化。中文按二元切分,维吾尔语把常见的阿拉伯字母变体统一成基本形式,再忽略附加符号的差异。这样虽然会漏掉一些结果,但至少不会把明显相关的文章排到后面。

第二个坑是排序。中文按字数算相关度很自然,维吾尔语的词长变化大,同一个词加上后缀就变成另一个字符串。我最后放弃了复杂的打分,改成「标题命中优先、摘要其次、正文最后」,再按发布时间打破平局。

这套搜索还很不完美,但它足够快,也不需要额外的服务。等文章多到几百篇的时候,我会考虑换成真正的全文索引;在那之前,先把内容写清楚,比优化搜索更值得。