优化 Discourse 对 CJK 语言的搜索

:bookmark: 本指南说明如何调整 Discourse 设置,以更好地支持网站搜索中的中文、日文和韩文 (CJK) 语言。

:person_raising_hand: 所需用户等级:管理员

Discourse 的默认设置可能不适合 CJK(中文、日文、韩文)语言。但是,当您网站的区域设置更改为 CJK 语言(日文、简体中文或繁体中文)时,Discourse 现在会自动调整许多此类设置。本指南将说明哪些设置是自动配置的,以及哪些仍需要您手动调整。

自动区域设置默认值

当您网站的默认区域设置为 jazh_CNzh_TW 时,以下设置将自动调整:

设置 默认值 CJK 区域设置默认值
min_search_term_length 3 1 (也适用于 ko)
min_post_length 20 8
min_first_post_length 20 8
min_personal_message_post_length 10 3
body_min_entropy 7 3
min_topic_title_length 15 6
title_min_entropy 10 3
min_title_similar_length 10 4
allow_uppercase_posts false true (ja 仅适用)
title_prettify true false

如果您的网站使用这些区域设置之一,通常您无需更改这些设置——它们已经针对 CJK 进行了优化。

手动调整

韩文区域设置

韩文 (ko) 仅针对 min_search_term_length 具有自动区域设置默认值。如果您的网站使用韩文区域设置,您应手动将上述其他设置调整为类似的值。

包含 CJK 内容的多语言或非 CJK 区域设置网站

如果您的网站默认区域设置不是 CJK 语言,但您有大量的 CJK 用户,您需要手动调整这些设置:

  • min_search_term_length 设置为 12 — CJK 关键字可以短至一个或两个字符
  • min_post_length 设置为大约 8
  • body_min_entropy 设置为大约 3 — 在 CJK 语言中,重复出现很常见且有意义,因此设置过高可能会导致“内容无意义的帖子”错误
  • min_topic_title_length 设置为大约 6
  • title_min_entropy 设置为大约 3
  • min_title_similar_length 设置为大约 4
  • 启用 allow_uppercase_posts — Discourse 在分析主题标题的大小写时可能无法识别 CJK 字符,从而导致错误
  • 禁用 title_prettify — 标题美化规则是为拉丁字母设计的,可能无法很好地处理 CJK 文本

搜索分词

为了提高搜索准确性,Discourse 提供可选的 CJK 专用分词设置:

  • search_tokenize_chinese — 启用对中文文本的分词以获得更好的搜索结果
  • search_tokenize_japanese — 启用对日文文本的分词以获得更好的搜索结果

这些默认情况下是禁用的,可以在管理搜索设置中启用。

疑难解答搜索问题

如果您在进行这些更改后遇到搜索功能问题,则可能需要重新索引数据库。操作方法如下:

  1. 进入您的 Discourse Docker 安装目录。
  2. 运行以下命令访问应用容器:
    ./launcher enter app
    
  3. 进入容器后,运行重新索引命令:
    rake search:reindex
    

重新索引后,您应该能够有效地搜索内容。

8 个赞