我很确定应该有一种方法可以在MyISAM表中使用全文索引搜索主题标签。默认设置将执行以下操作:
textfield
hashtag
#hashtag
#two #hashtag #hashtag
SELECT * FROM table WHERE MATCH(textfield) AGAINST ('#hashtag')
> | hashtag |
> | #hashtag |
> | #two #hashtag #hashtag |
虽然它应该仅返回第2行和第3行。看起来hashtag被视为单词分隔符,因此在搜索开始之前它被“删除”。我该怎么做才能启用索引并搜索包含#
的字词作为单词的一部分?
答案 0 :(得分:2)
正如Fine-Tuning MySQL Full-Text Search所述:
您可以通过多种方式更改被视为单词字符的字符集,如以下列表中所述。进行修改后,重建包含任何
FULLTEXT
索引的每个表的索引。假设您要将连字符('-'
)视为单词字符。使用以下方法之一:
修改MySQL源代码:在
storage/myisam/ftdefs.h
中,请参阅true_word_char()
和misc_word_char()
宏。将'-'
添加到其中一个宏中并重新编译MySQL。修改字符集文件:这不需要重新编译。
true_word_char()
宏使用“字符类型”表来区分字母和数字与其他字符。 。您可以在其中一个字符集XML文件中编辑<ctype><map>
数组的内容,以指定'-'
是“字母”。然后使用给定的FULLTEXT
索引字符集。有关<ctype><map>
数组格式的信息,请参阅Section 10.3.1, “Character Definition Arrays”。为索引列使用的字符集添加新的排序规则,并更改列以使用该排序规则。有关添加归类的一般信息,请参阅Section 10.4, “Adding a Collation to a Character Set”。有关特定于全文索引的示例,请参阅Section 12.9.7, “Adding a Collation for Full-Text Indexing”。