elasticsearch,search,solr,sphinx,Mysql,elasticsearch,Search,Solr,Sphinx" /> elasticsearch,search,solr,sphinx,Mysql,elasticsearch,Search,Solr,Sphinx" />

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

如何使用MySQL全文搜索土耳其字符?,mysql,elasticsearch,search,solr,sphinx,Mysql,elasticsearch,Search,Solr,Sphinx,我有一个小数据集存储在MySQL上,我希望避免使用/管理ElasticSearch/Sphinx等实例,保持索引更新等,并使用MySQL全文索引进行搜索 但我的特殊要求是做一个模糊搜索,当关键字是“Turkce”时,它可以找到“Türkçe”,反之亦然 我对术语不熟悉,因此无法决定使用哪种功能。我怎样才能用MySQL做到这一点?我应该使用Soundex或任何其他功能吗 非常感谢。您有两个选择 create table lang(t varchar(200), FULLTEXT INDEX(t))

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

但我的特殊要求是做一个模糊搜索,当关键字是“Turkce”时,它可以找到“Türkçe”,反之亦然

我对术语不熟悉,因此无法决定使用哪种功能。我怎样才能用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)
最简单的方法是将全文索引中涉及的列的MySql排序规则设置为
utf8mb4\u unicode\u ci
(或
utf8\u unicode\u ci
)。如果列已经使用unicode编码,那么这样做不会丢失数据。不区分大小写的
\u-ci
编码将许多带有diareses的字符视为其未加修饰的对应字符。但这种排序最适用于西欧语言,如瑞典语(MySql开发人员的国家)。试试看。请让我们知道它对土耳其语的效果如何

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

每当您搜索时,您都会将用户提供的搜索词转换为其搜索段塞等效项,然后进行搜索

search slug stored函数将带有字符的日记(如
ç
)转换为它们的简单等价物(如
c
)。下面是一些关于创建存储函数的想法

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