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

问题描述

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

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

我对术语不熟悉,因此无法在功能之间做出决定。我该如何使用MysqL?我应该使用Soundex还是其他任何功能

非常感谢您。

解决方法

pre><html>
   <head>
      <title>change picture</title>
      <script type = "text/javascript">
          function displayNextImage() {
              x = (x === images.length - 1) ? 0 : x + 1;               
              document.getElementById("img").src = images[x];
}
          function startTimer() {
              setInterval(displayNextImage,4000);
          }
          var trans=[
              
              ]; 
          var images = [
              "https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/10.png","https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/11.png","https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/12.png","https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/13.png","https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/14.png"
              ],x = -1;
          
      </script>
   </head>
<body onload = "startTimer()">
       <img id="img" src="https://cosecha-verde.000webhostapp.com/images/Centro/2016-2017/1.png" data-transition="slideInLeft" />
   </body>
</html>
,

您有两种选择。

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

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

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

“搜索记录”存储功能会将带有怀念症的字符(如ç)转换为未经修饰的等价物(如c)。这里是有关创建该存储函数的一些想法。 How to remove accents in MySQL?

SOUNDEX对于您的目的完全一文不值。它是数十年前发明的,当时计算机具有数千个存储位置,其特定目的是查找北美专有名称。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...