给双语内容做搜索的几个坑
站内搜索看起来很简单,两个字段、一个 like 查询就能跑起来。真正做起来才发现,中文需要分词,维吾尔语需要处理字母的不同写法,两个语言的排序规则又完全不同。
我先用了最笨的办法:把标题、摘要、正文全部拼成一个搜索列,查询时对关键词做一次归一化。中文按二元切分,维吾尔语把常见的阿拉伯字母变体统一成基本形式,再忽略附加符号的差异。这样虽然会漏掉一些结果,但至少不会把明显相关的文章排到后面。
第二个坑是排序。中文按字数算相关度很自然,维吾尔语的词长变化大,同一个词加上后缀就变成另一个字符串。我最后放弃了复杂的打分,改成「标题命中优先、摘要其次、正文最后」,再按发布时间打破平局。
这套搜索还很不完美,但它足够快,也不需要额外的服务。等文章多到几百篇的时候,我会考虑换成真正的全文索引;在那之前,先把内容写清楚,比优化搜索更值得。
我先用了最笨的办法:把标题、摘要、正文全部拼成一个搜索列,查询时对关键词做一次归一化。中文按二元切分,维吾尔语把常见的阿拉伯字母变体统一成基本形式,再忽略附加符号的差异。这样虽然会漏掉一些结果,但至少不会把明显相关的文章排到后面。
第二个坑是排序。中文按字数算相关度很自然,维吾尔语的词长变化大,同一个词加上后缀就变成另一个字符串。我最后放弃了复杂的打分,改成「标题命中优先、摘要其次、正文最后」,再按发布时间打破平局。
这套搜索还很不完美,但它足够快,也不需要额外的服务。等文章多到几百篇的时候,我会考虑换成真正的全文索引;在那之前,先把内容写清楚,比优化搜索更值得。
2 条评论
R
Rewayat工作室
2026-11-01 21:13
归一化那一段很有启发,维吾尔语的附加符号处理确实容易被忽略。
陈
陈默
2026-11-01 21:13
同意最后一句,内容写清楚比优化搜索更重要。