看板 Database 關於我們 聯絡資訊
※ 引述《bcse (Lvx ex Caelis)》之銘言: : ※ 引述《sweetwords (米虫三號)》之銘言: : : 這是我們搜尋功能會用到的一段 sql 句 : : 我們有將 TABLE 相關欄位做了全文索引,主要想找到符合變數的資料 : : SELECT * FROM `TABLE_NAME` WHERE MATCH (COLUMN_NAME) AGAINST ('中文變數'); : : 非常奇怪的是,當我下中文變數是「注意力」的時候 : : 可以順利搜尋到幾筆資料 : : 但是當我將中文縮減成「注意」的時候 : : 卻完全搜尋不到任何資料 @_@" : 這應該是 MySQL 沒錯吧? yes :> : 有兩個可能的原因: : 1. 查詢字詞太短,被 MySQL 自動忽略。 : 2. Fulltext Search 不支援中文,原因是 MySQL 中沒有中文斷詞機制 : 換句話說,它會將整句中文當成一個字,所以搜尋「注意」時搜尋不到「注意力」 : 另外,Fulltext Search 就我所知並沒有萬用字元,只有 modifier 這些特殊字元 : 有幾個方法你可以參考: : 1. 改用效能非常差的 LIKE Search 哈!這種我也有想過,可是其實我不太懂多大的資料量用 like 處理起來 速度才真的會有所影響 @_@" 現在研所老闆 project 給我們的資料量大概 30 萬筆左右 : 2. 用 Lucene 之類的 Fulltext Search Engine partner 之前有找到這款,不過好像有些 java + 斷字的技術 @_@? 不知道會不會搞得太複雜 ._." : 3. 另外存一份斷好詞、專門用來搜尋用的欄位,你可以用 Bigram 斷詞法 : 不過 Bigram 斷詞法斷出來會變成兩個字一組,而 MySQL 預設會忽略 3 個字 : 以下的查詢字詞,你還必須改 my.ini 的設定(但看你敘述查詢「注意力」查 : 得到東西,你應該改好這個部份了?) : 你可以參考這篇 http://blog.bcse.info/wordpress-bigram-fulltext-search : 「實作」的 Section 嗯,已經有做調整了 :> 像是「資料」去找查得到東西,只是沒辦法進一步查到「資料庫」去查該有的東西 可是這邊對於斷字有個觀念點我不太懂 很多的斷字方法是針對去查的資料作斷字的處理? 亦或是針對你下的查詢字去做斷字的處理呢? 如果是針對查詢字去做處理,我不懂的方面是 「資料」兩個字再怎麼拆好像也無法拆到「資料庫」三個字 @_@" 如果是針對查詢的資料去做處理的話, 每一筆資料查詢這樣去做不是很費工嗎 @_@? 大大上面提到的作法難道是將斷好的字詞先存到資料庫 @_@? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.74.176
bcse:要多一個欄位存斷好的字、查詢時也要先斷好字再查 02/02 19:39
bcse:當然你也可以考慮修改或擴充 MySQL,讓它能正確為中文建索引 02/02 19:52
sweetwords:有擴充或是修改 mysql 的相關資訊嗎 ._.? 02/02 20:50