如何使用mysql全文搜索土耳其字符?

jvlzgdj9  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(414)

我有一个存储在mysql上的小数据集,我希望避免使用/管理elasticsearch/sphinx等示例,保持索引更新等,并使用mysql全文索引来搜索它们。
但我的特殊要求是做一个模糊搜索,可以找到“t”ürk公司ç当关键字为“突厥语”时为“e”,反之亦然。
我对术语不熟悉,所以无法决定使用哪种功能。我怎样才能用mysql做到这一点?我应该使用soundex或其他功能吗?
非常感谢你。

vh0rcniy

vh0rcniy1#

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)
ix0qys7i

ix0qys7i2#

你有几个选择。
最简单的方法是,如果它对您正常工作的话,将全文索引中涉及的列的mysql排序规则设置为 utf8mb4_unicode_ci (或 utf8_unicode_ci ). 如果您的列已经使用unicode编码,那么这样做不会丢失数据。不区分大小写 _ci 编码将许多带有分音符的字符视为其未加修饰的对应字符。但是这种排序规则最适用于西欧语言,比如瑞典语(mysql开发人员的国家)。试试看。请告诉我们土耳其语的效果如何。
如果不起作用,请尝试为要搜索的每一列存储两列。一个应该包含实际值,另一个应该包含搜索slug值。您可以使用自己创建的存储函数从实际值计算搜索slug值。然后,在search slug列上创建全文索引。
无论何时搜索,都要将用户提供的搜索词转换为其对应的search slug并进行搜索。
search slug stored函数转换带有如下字符的日志 ç 像这样朴素的人 c . 下面是一些关于创建存储函数的想法。如何删除mysql中的重音符号?
soundex对你来说毫无价值。它是几十年前发明的,当时计算机有数千个存储位置,专门用于查找北美的专有名称。

相关问题