⚠️ 此页面为自动翻译,翻译可能不完美。
blog-post

使用 Manticore Search 进行越南语搜索

Manticore Search 为越南语搜索提供基本支持。越南语使用带有变音符号(重音符号)的拉丁字母,Manticore 会自动处理这些变音符号以进行基本文本匹配。虽然这涵盖了基础知识,但请注意,像越南语特定的词干提取或停用词等高级功能并未包含在内。

快速入门

越南语搜索使用默认配置即可——无需特殊设置!只需创建一个使用默认 charset_table=non_cont 的表:

CREATE TABLE vietnamese_content (
    id bigint,
    title text,
    content text
) charset_table='non_cont';

自动变音符号处理

Manticore 越南语支持的一个关键功能是自动变音符号归一化。这意味着用户可以使用带或不带变音符号进行搜索,两者都能匹配:

  • "tiếng" 匹配 "tieng" 及反之
  • "Hà Nội" 匹配 "Ha Noi" 及反之
  • "đường phố" 匹配 "duong pho" 及反之

这尤其有用,因为:

  • 用户通常为了速度而省略变音符号
  • 不同的输入法可能会生成不同的变音符号组合
  • 它通过容忍打字差异提供了更好的用户体验

示例用法

让我们创建一个带有越南语内容的简单示例:

-- Create table
CREATE TABLE vietnamese_news (
    id bigint,
    title text,
    body text
) charset_table='non_cont';

-- Insert some Vietnamese content
INSERT INTO vietnamese_news VALUES
(1, 'Tin tức về Hà Nội', 'Hà Nội là thủ đô của Việt Nam'),
(2, 'Tin tuc ve Ha Noi', 'Ha Noi la thu do cua Viet Nam'),
(3, 'Tiếng Việt trong công nghệ', 'Công nghệ thông tin phát triển nhanh'),
(4, 'Tieng Viet trong cong nghe', 'Cong nghe thong tin phat trien nhanh');

现在你可以使用任一形式进行搜索:

-- Search with diacritics
SELECT * FROM vietnamese_news WHERE MATCH('Hà Nội');

结果:

+------+--------------------------+-------------------------------------------+
| id   | title                    | body                                      |
+------+--------------------------+-------------------------------------------+
|    1 | Tin tức về Hà Nội        | Hà Nội là thủ đô của Việt Nam             |
|    2 | Tin tuc ve Ha Noi        | Ha Noi la thu do cua Viet Nam             |
+------+--------------------------+-------------------------------------------+
-- Search without diacritics - still matches!
SELECT * FROM vietnamese_news WHERE MATCH('Ha Noi');

结果:

+------+--------------------------+-------------------------------------------+
| id   | title                    | body                                      |
+------+--------------------------+-------------------------------------------+
|    1 | Tin tức về Hà Nội        | Hà Nội là thủ đô của Việt Nam             |
|    2 | Tin tuc ve Ha Noi        | Ha Noi la thu do cua Viet Nam             |
+------+--------------------------+-------------------------------------------+

正如你所看到的,两个查询返回相同的结果,这表明 Manticore 自动处理了变音符号归一化。

原理说明

Manticore 的 non_cont 字符集表(默认值)包含全面的越南语变音符号映射:

  • ă, âa
  • êe
  • ô, ơo
  • ưu
  • đd
  • 所有声调符号(à, á, ả, ã, ạ 等)也都会被归一化

这些映射在索引和搜索期间都会应用,确保无论文本如何输入都能保持一致的匹配。

限制

Manticore 的越南语支持是基础的,包括:

  • 变音符号归一化 - 自动工作
  • 基本分词 - 正确处理越南语字符
  • 无越南语词干提取 - 词形不会归一化(例如,“tôi”, “tôi”, “tôi” 被视为不同)
  • 无越南语停用词 - 常见词如“của”, “và”, “là” 默认不会被过滤
  • 无高级形态学 - 无基于词典的词形还原

对于许多应用,基础的变音符号处理已经足够。然而,如果你需要更复杂的越南语处理(如处理词形变化或过滤停用词),可能需要实现自定义解决方案或使用外部预处理。

最佳实践

  1. 使用默认的 charset_table:除非有特殊需求,否则无需自定义
  2. 如需,创建自定义停用词:你可以创建一个停用词文件来过滤常见越南语词,如“của”, “và”, “là”, “với” 等
  3. 测试你的查询:始终使用带变音符号和不带变音符号的形式进行测试,以确保搜索按预期工作
  4. 考虑预处理:为了获得更好的结果,你可能希望在索引前对文本进行归一化(例如处理词形变化)

高级配置

如果你需要区分大小写匹配或希望保留变音符号作为独立字符,可以自定义 charset_table。然而,对于大多数使用场景,默认行为(匹配带或不带变音符号)提供了最佳用户体验。

结论

Manticore Search 提供了基本的越南语支持,可以处理最常见的用例:匹配带或不带变音符号的文本。这使得用户在没有重音符号时输入更加宽容。对于简单的搜索应用,这可能已经足够。然而,对于需要高级越南语处理(词干提取、形态分析或复杂的相关性排序)的应用,可能需要通过额外的预处理补充 Manticore 或考虑其他解决方案。

安装Manticore Search

安装Manticore Search