2017-10-15 67 views
0

所以,這樣的查詢將返回一個非空集:如何構建這樣一個全文索引,將下劃線看作InnoDB中的單詞?

SELECT * FROM mytable WHERE MATCH(name) AGAINST ('+some +text' IN BOOLEAN MODE);

從一個表,其中只記錄的名稱屬性爲「SOME_TEXT」。基本上,我想強制InnoDB在構建全文索引時將下劃線視爲分隔符,就像使用點和連字符一樣。這怎麼可能在mysql中本地執行,或者甚至默認有第三方解析器? 謝謝

編輯:我知道最簡單的解決辦法是複製列,並根據需要將單詞分開,然後構建索引,但我寧願不這樣做,如果不是必要的,因爲表有數百萬行..

回答

0

您正試圖改變定義一個字的字符。查找的地方在documentation上,用於微調搜索。具體而言,您想控制單詞中允許使用哪些字符 - 並且您想要_爲非單詞字符。

一個推薦的方法是修改字符集文件:

假設你要正確對待連字符(「 - 」)作爲一個字 字符。使用以下方法之一:

。 。 。

  • 修改字符集文件:這不需要重新編譯。所述true_word_char()宏使用「字符類型」表,以區分其他字符 字母和數字。 。您可以將其中一個字符集XML文件中的數組 編輯爲 指定' - '是「字母」。然後使用給定的字符集爲 您的FULLTEXT索引。有關數組 格式的信息,請參見第10.3.1節「字符定義陣列」。

唯一的缺點是,這會影響所有全文索引。

另一種方法是定義一個用空格代替下劃線第二列,並以此爲基礎的全文索引。

如果你想要一個索引特定的方法,那麼另一個選擇是定義你自己的排序規則。

注意:您可能還需要小心的最低字的大小。默認值是3或4;較小的單詞被忽略。

相關問題