2014-01-23 23 views
2

我很確定應該有一種方法可以使用MyISAM表中的全文索引來搜索主題標籤。默認設置將執行以下操作:MySQL全文搜索主題標籤(包括索引中的#符號)

textfield 
hashtag 
#hashtag 
#two #hashtag #hashtag 

SELECT * FROM table WHERE MATCH(textfield) AGAINST ('#hashtag') 
> | hashtag    | 
> | #hashtag    | 
> | #two #hashtag #hashtag | 

雖然它應該只返回第2和第3行。它看起來像標籤被視爲一個單詞分隔符,所以它在搜索開始之前被「刪除」。我應該怎麼做才能啓用索引和搜索包含#作爲單詞的一部分的術語?

回答

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」