2009-09-20 44 views
2

我索引字符串包含在MySQL全文中的URL ...但我不希望結果中包含的網址。我如何使MySQL全文索引忽略url字符串,特別是擴展

作爲一個例子,我搜索「PHP」或「HTML」,我得到像「伊維薩天使按摩公司看到funandfrolicks」的記錄php「......享樂主義分心至上。

我看不到添加正則表達式到停用詞列表的示例。

我想到的其他事情(並失敗)是創建全文SQL,並減少單詞貢獻...但是,在以下SQL中,相關性值沒有改變。

SELECT title, content,match(title,content) against('+PHP >".php"' IN BOOLEAN MODE) 
FROM tb_feed 
WHERE match(title,content) against('PHP >".php"' IN BOOLEAN MODE) 
ORDER BY published DESC LIMIT 10; 

另一種方法是用附加條件凌亂的SQL語句...

WHERE ... IF(content REGEXP '.php', content REGEXP '(^|)php', 1) ... 

思考......最新最好的解決方案?

+0

哦,我不想創建一個帶有預格式化文本(刪除網址)的全新表格列。 – Drew 2009-09-21 00:31:34

回答

0

如果你想PHP/HTML不是URL的一部分,一個簡單的辦法就是儘量

like "% php %" 
like "% html %" 

這樣一來,PHP/HTML必須在句子中的詞彙。

+0

是的,我可以,但像「REGEXP」(^ |)php'「這是一個額外的WHERE條件,它不利用mysql的快速全文索引。 – Drew 2009-09-21 00:28:47

1

如果結果的數量是可以忍受的,您可以選擇不顯示您想要忽略的單詞的匹配。如.php或.html。這非常快,但會涉及使用更多的內存比你需要。

另一種解決方案是使用您想要搜索的關鍵字創建另一個字段。有了這個字段,你可以省略url和其他不需要的關鍵字。此解決方案需要很短的時間才能寫入,但會佔用硬盤上的額外空間。

更好的解決方案是創建另一個表稱爲關鍵字(或類似)。當用戶提交搜索查詢時,會搜索關鍵字表以查找指定的關鍵字。上傳或檢索內容時,通過分割輸入數據填充關鍵字表。

這最後一個選項的優點是速度可能很快,因爲關鍵字只用指向主內容記錄的索引存儲一次,所以數據非常緊湊。如果你願意的話,它可以讓聰明的搜索發生。

+0

是的,它變得有點混亂,但謝謝 – Drew 2009-09-22 11:02:27