在 MariaDB 10 中作为全文搜索词边界的下划线
Underscore as fulltext search word boundaries in MariaDB 10
我们假设 table node 有一个 varchar 列 description 在 MariaDb 10 中带有全文索引。
查询
select description from node where match(description) against('night');
将匹配
等描述值
Night-and-day
What-a-wonderful-night
What a wonderful night
但不会匹配
What_a_wonderful_night
现在我的问题是:似乎 space ( ) 和连字符 (-) 被认为是单词边界,但下划线 (_) 不是。有没有办法通过配置或在查询内部使下划线也成为单词边界?
更改 ha_innobase.cc 中的宏 true_word_char():
-#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_')
+#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR))
并重建 MariaDB。
我们假设 table node 有一个 varchar 列 description 在 MariaDb 10 中带有全文索引。
查询
select description from node where match(description) against('night');
将匹配
等描述值Night-and-day
What-a-wonderful-night
What a wonderful night
但不会匹配
What_a_wonderful_night
现在我的问题是:似乎 space ( ) 和连字符 (-) 被认为是单词边界,但下划线 (_) 不是。有没有办法通过配置或在查询内部使下划线也成为单词边界?
更改 ha_innobase.cc 中的宏 true_word_char():
-#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_')
+#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR))
并重建 MariaDB。