如何使用MySQL全文搜索土耳其语字符



我在MySQL上存储了一个小数据集,我希望避免使用/管理ElasticSearch/Shinx等实例,保持索引更新等,并使用MySQL全文索引进行搜索。

但我的特殊要求是进行模糊搜索;Türkçe";当关键字是"时;土耳其;反之亦然。

我不熟悉术语,所以无法在功能之间做出决定。如何使用MySQL做到这一点?我应该使用Soundex还是任何其他功能?

非常感谢。

您有几个选择。

最简单的方法是将FULLTEXT索引中涉及的列的MySql排序规则设置为utf8mb4_unicode_ci(或utf8_unicode_ci(。如果您的列已经使用unicode编码,那么这样做不会丢失数据。不区分大小写的_ci编码将许多带有日记的字符视为未修饰的对应字符。但这种排序法最适用于西欧语言,如瑞典语(MySql开发人员所在的国家(。试试看。请让我们知道它对土耳其语的效果如何。

如果不起作用,请尝试为要搜索的每列存储两列。一个应该包含实际值,另一个应该是搜索段塞值。您可以使用自己创建的存储函数根据实际值计算搜索段塞值。然后,在搜索段塞列上创建FULLTEXT索引。

无论何时搜索,都要将用户提供的搜索词转换为等效的搜索段塞,然后进行搜索。

search slug存储函数将带有日记的字符(如ç(转换为未修饰的等效字符(如c(。以下是关于创建存储函数的一些想法。如何删除MySQL中的重音符号?

SOUNDEX对你来说毫无价值。它是几十年前发明的,当时计算机有数千个存储位置,专门用于查找北美专有名称。

create table lang(t varchar(200), FULLTEXT INDEX(t));
insert into lang values ('Türkçe');
insert into lang values ('Turkce');
mysql> select * from lang;
+--------+
| t      |
+--------+
| Türkçe |
| Turkce |
+--------+
2 rows in set (0.00 sec)
mysql> select * from lang where t like '%Turkce%';
+--------+
| t      |
+--------+
| Türkçe |
| Turkce |
+--------+
2 rows in set (0.00 sec)

最新更新