2017-02-10 23 views
3

我們在查詢中成功使用MATCH AGAINST在我們的數據庫中進行搜索,主要是捷克語,因此我們使用utf8_czech_ci作爲默認排序規則。我們將查詢的最小長度設置爲1,並禁用了所有停用詞。在utf8_czech_ci中與'ch'匹配的MySQL

但是,請考慮搜索單詞Schedule

當你寫:

  • sSchedule發現
  • sc:沒有發現
  • schSchedule發現

它看起來就像對待ch爲單個字符(這是正確的捷克語),但當我們進行全文搜索時肯定是不正確的。

有沒有辦法避免這種行爲?

回答

1

是的,utf8_czech_ci將ch視爲一個字母,在hi之間。 Čč是相等的,但畢竟是c。與Caron相同的其他字母也是如此。

This提供了各種utf8排序規則的排序規則。

我認爲你的觀察結果是正確的整理。 「時間表」是一個捷克語單詞嗎?

要避免它,請爲該列選取另一個utf8 COLLATION,然後重建FULLTEXT索引。 utf8_binutf8_general_ciutf8_unicode_ci可能是候選人。您可能需要有兩個具有相同文本但排序不同的列(和索引)。然後選擇列以控制您想要搜索的語言。

你是「比較」字符串嗎?如果是這樣,整理會產生很大的差異 - 「在捷克說」<「請參閱」<「sch」,但不是任何(?)其他整理。

(utf8mb4的操作與utf8相同,至少就此問題而言)。