《矯正錯誤的查詢條件,PostgreSQL的黑科技》要點:
本文介紹了矯正錯誤的查詢條件,PostgreSQL的黑科技,希望對您有用。如果有疑問,可以聯系我們。
PostgreSQL數據庫一個開源的數據庫,具體的信息查看百度百科.
這里介紹一個模塊fuzzystrmatch.
安裝:
psql -d module_test -f fuzzystrmatch.sql
該模塊提供的函數包括:soundx(), difference(), levenshtein() 和 metaphone() .soundx() 和 metaphone() 是語音算法,將文本字符串轉成基于發音的代碼字符串.而 difference() 和 levenshtein() 則返回數值代表兩個輸入字符串的相似度.
soundx()匹配的相似發音方法.對非英文的名字非常有用.
levenshtein() 函數返回兩個字符串之間的 Levenshtein 距離.Levenshtein 距離,又稱編輯距離,指的是兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數.許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符.
metaphone() 函數計算字符串的 metaphone 鍵.metaphone() 函數可用于拼寫檢查應用程序.如果成功,則返回字符串的 metaphone 鍵,如果失敗,則返回 false.
difference() The difference function converts two strings to their Soundex codes and then reports the number of matching code positions. Since Soundex codes have four characters, the result ranges from zero to four, with zero being no match and four being an exact match. (Thus, the function is misnamed — similarity would have been a better name.)
我們主要用到的是levenshtein();又叫做“字符串編輯距離”
Levenshtein距離是一種計算兩個字符串間的差異程度的字符串度量(string metric).我們可以認為Levenshtein距離就是從一個字符串修改到另一個字符串時,其中編輯單個字符(比如修改、插入、刪除)所需要的最少次數.俄羅斯科學家Vladimir Levenshtein于1965年提出了這一概念.
我們認為用戶的輸入存在N個錯誤的字符,例如當用戶輸入‘kay’ 我們需要查詢出來與kay有一個不一樣字母的所有記錄,sql: SELECT * from table where levenshtein(mykey,'kay')=1 .當然完全匹配的(nysql=‘kay’)是不會出現在結果中的,需要額外處理,因為最近距離是0不是1.
postgresql 9.5
《矯正錯誤的查詢條件,PostgreSQL的黑科技》是否對您有啟發,歡迎查看更多與《矯正錯誤的查詢條件,PostgreSQL的黑科技》相關教程,學精學透。維易PHP學院為您提供精彩教程。