2

我想进行搜索,假设我的键盘是英文的。但在数据库中,有一些数据包括土耳其语字符:

“伊斯坦布尔”

“伊兹密尔”

等等因为我的键盘中没有“ İ ”,所以我永远无法在我的查询中找到这两个数据。

最好的方法是什么?

更新:

在 NodeJS 中,我有以下功能可以将土耳其语字符转换为英语字符:

function convertTurkishToEnglish(trStr){
   return S(trStr)
      .replaceAll('ı', 'i')
      .replaceAll('ö', 'o')
      .replaceAll('ü', 'u')
      .s; 
}

但我无法将其应用于数据库中的数据。

4

2 回答 2

1

您可以使用 unicode 转义序列\u0130来识别İ

于 2013-01-22T12:59:06.423 回答
1

想到三个选项:

  1. 增强数据以包含表示文本的“英语”版本的附加字段(convertTurkishToEnglish例如使用您的函数)(您可能能够使用 MapReduce 函数来构建具有所需内容的新表)。
  2. 使用 ElasticSearch 或 Solr 等搜索引擎进行调查,以获得更详尽的搜索选项
  3. 增加正则表达式的复杂性以在搜索文本时包含所有字符替换组合(在运行时您将构建这些搜索字符串):

    db.users.find({"username": { $regex: "\u0130|ian", $options : "i" } })

在上面的代码片段中,它正在寻找İor i。您需要对任何其他土耳其语字符执行此操作。(例如,它正在寻找“Ian”)。

于 2013-01-22T13:48:21.783 回答