搜索引擎中的多语言数据库编码

Posted

技术标签:

【中文标题】搜索引擎中的多语言数据库编码【英文标题】:Multi language database encoding in search engine 【发布时间】:2016-05-27 17:03:38 【问题描述】:

我有一个数据库(mysql),其中存储了超过 100 000 个不同语言的关键字。举个例子,如果我有三个列 [id] [turkish (utf8_turkish_ci)] [german(utf8)]

用户可以在搜索框中输入德语或土耳其语单词。如果用户输入一个德语单词,一切都很好,所以它会打印出土耳其语,但是如何用土耳其语来解决它。我问是因为每种语言都有自己的附加字符,例如 ä ü ö ş 等。

所以我应该使用

mb_convert_encoding

要转换字符串,然后如何检查它是德语还是土耳其语字符串,我认为这会很复杂。还是表格的编码错误?

现在卡住了,所以如何实现它,以便用户可以输入两种语言的关键字

【问题讨论】:

【参考方案1】:

您需要解决几个问题才能使其正常工作。

首先,您已选择utf8 字符集来保存所有文本。这是一个不错的选择。如果这是 2016 年的新应用程序,您可以选择 utf8mb4 字符集。选择字符集后,您的用户应该能够阅读您的文本。

第二,为了搜索和排序(WHEREORDER BY),您需要为每种语言选择合适的排序规则。对于现代德语,utf8_general_ci 可以很好地工作。如果您需要标准的词汇排序,utf8_unicode_ci 会更好一些。读这个。 http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

对于现代西班牙语,您应该使用utf8_spanish_ci。这是因为在西班牙语中 N 和 Ñ 字符被认为是不同的。我不知道通用排序规则是否适用于土耳其语。

请注意,您似乎混淆了问题中字符集和排序规则的概念。您提到了土耳其语列的排序规则和德语列的字符集。

您可以在查询中明确指定字符集和排序规则。例如,你可以写

    WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name;

在这个表达式中,_utf8 'München' 是一个字符常量,而

   constant COLLATE utf8_unicode_ci = table.name

是一个查询说明符,其中包括一个明确的排序规则名称。阅读本文。http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html

第三,您可能希望为每个特定语言的列分配一个默认排序规则。默认排序规则已包含在索引中,因此它们将有助于加快搜索速度。

第四,您的用户将需要使用适当的输入法(键盘映射等)向您的应用程序呈现数据。希望土耳其语用户知道如何输入土耳其语单词。

【讨论】:

我忘了写我用 unicode 替换特殊字符来保存土耳其语单词,所以我可能使用 strtr() 来检测字符串中的字符以将其替换为要发送的 unicode查询 我的意思是我将 strtr() 与数组一起使用

以上是关于搜索引擎中的多语言数据库编码的主要内容,如果未能解决你的问题,请参考以下文章

多语言网站的用户体验

.NET Core工作流引擎(RoadFlow)多语言版发布

多语言 ElasticSearch 支持

使用 ASP.NET MVC 的多语言网站

「GoCN酷Go推荐」Go高性能多语言NLP和分词库——gse

分段多语言并行文本