2011-09-29 36 views
-1

基本上我想要做的是搜索一些MYSQL數據庫並返回結果,其中某個字段與數據庫中的另一個記錄相似超過50%。MYSQL搜索數據庫的相似結果

我想實現什麼? 我有很多作家將內容添加到我擁有的網站網絡中,我需要一個工具來告訴我他們寫的任何網頁是否與當前在網絡上發佈的任何網頁過於相似。這可以在post/update或cron上運行......任何一種方式都適用於我。

我試着做一些用PHP,從數據庫中繪製記錄,並使用函數similar_text(),它給出了兩個字符串之間的%差異 - 但這不是一個可行的解決方案,因爲你必須比較每個條目針對其他所有條目&我用microtime解決了大約80個小時才能完全搜索所有條目!想知道如果它甚至是可能的!?

謝謝!

+1

-1基於他人的答案來表示你自己的回答...蹩腳的事情.. – Catalin

回答

0

感謝您的答案,對於任何尋找類似於此問題的解決方案的人,我使用SOUNDEX函數來提取具有相似標題的條目,然後將它們與similar_text()函數進行比較。不是一個完整的數據庫比較,但接近我可以得到它!

2

任何事情都有可能。

不知道您的標準類似,很難提供具體的解決方案。不過,我的建議是預先建立一個相似表,利用一個函數,如similar_text()。當通過術語進行搜索時,將其用作索引表。

您將首先點擊構建這樣一個索引。但是,隨着新記錄的添加,您可以更輕鬆地進行管理。

+0

嗨Jason, 很難定義類似的標準,也許如果我解釋爲什麼我想找到類似的記錄這將有助於你理解我想要達到的目標。 我有很多作家將內容添加到我擁有的網站網絡中,我需要一個工具來告訴我他們寫的任何網頁是否與當前在網絡上發佈的任何網頁過於相似。 –

+0

相似表聽起來很有趣,我會怎麼做呢? 乾杯 –

+0

我建議你更新你的帖子,甚至單獨提出這個問題。但就MySQL表而言,在索引表中,正如我所描述的那樣。 –

3

您可能正在尋找的是SOUNDEX。這是mysql中唯一的基於聲音的搜索。如果你有數據了很多比較,你可能會需要預生成的同音和比較同音列或使用像這樣生活:

SELECT * FROM data AS t1 LEFT JOIN data AS t2 ON SOUNDEX(t1.fieldtoanalyse) = SOUNDEX(t2.fieldtoanalyse) 

請注意,您還可以使用

t1.fieldtoanalyze SOUNDS LIKE t2.fieldtoanalyze 

語法。

Finaly,您可以將SOUNDEX保存爲一列,只需創建一個列和:

UPDATE data SET fieldsoundex = SOUNDEX(fieldtoanalyze) 

,然後比較直播與預先生成的值

更多關於探測法

探測法是一個功能,分析一個詞的組成,但以一種非常粗糙的方式。這對於「顏色」與「顏色」和「鎧甲」與「鎧甲」的比較是非常有用的,但有時候也會用長單詞來排除奇怪的結果,因爲單詞的SOUNDEX是字母+3的數字代碼。這些組合可以讓你傷心難過。

請注意,在MySQL中沒有levenstein或metaphone實現...還沒有,但可能levenstein會是你的情況最好的。

+0

+1對於語音算法 –