作者sweetwords (米虫三號)
看板Database
標題Re: [SQL ] 我中文 SQL 句下錯了嗎?
時間Mon Feb 2 16:15:02 2009
※ 引述《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