簡體   English   中英

mysql正則表達式使用別名進行搜索

[英]mysql regexp for search using alias

我對regexp不太滿意,因此我真的希望獲得一些幫助以實現我的目標。
在數據庫中搜索時,我為特定的關鍵字使用別名。

這是一個例子

keyword  tets alias test   (someone have spell wrong then word test)
keyword  b.m.w  alias bmw  (if someone write b.m.w instead of bmw)

等等

到目前為止,如果用戶搜索"bmw 316"我將使用LIKE "%bmw%316%"來獲得結果。 現在,如果用戶搜索"bmw 316" ,則必須使用

"%b.m.w%316%" OR
"%bmw%316%"

因為bmw具有別名bmw

如果6個單詞的別名為2-3,則組合太多。
我正在嘗試使用正則表達式來實現它。
在上述情況下,它將類似於(bmw|bmw) 316

我該如何解決這個問題?

您不是在尋找REGEXP而是在尋找一種叫做levenshtein distance的東西

MySQL還沒有對此(出色的)概念提供本機支持,但是您可以在此處下載UDF:
http://joshdrew.com/
這是一個列表,因此您可以從以下列表中進行選擇:
http://blog.lolyco.com/sean/2008/08/27/damerau-levenshtein-algorithm-levenshtein-with-transpositions/

您也可以在MySQL中編寫自己的函數,因此不必安裝UDF。
http://www.supermind.org/blog/927/working-mysql-5-1-levenshtein-stored-procedure

最后,這個問題也可能對您有所幫助:
Levenshtein距離的實現為MySQL /模糊搜索?

最匹配的查詢看起來像:

SELECT * FROM atable a ORDER BY levenshtein(a.field, '$search') ASC LIMIT 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM