[英]Matching multiple similar strings in SQL
所以這是一種情況:
我需要找到一種方法來匹配2個相似的字符串,例如:
一個- SAMSUNG Galaxy S5 White
b- Mobile phone SAMSUNG GALAXY S5 WHITE
我在數據庫字段中有一個字符串a
,現在我有一個等效字符串,它來自外部源。 顯然,這是相同的產品,但是如果我直接搜索標題字段,搜索將不會產生期望的結果。
有什么想法可以查找相似的字符串嗎? 也許將字符串分解為令牌? 我寫的查詢會根據這些標記查找嗎? MySQL 5.7.6中引入的ngram查找功能在這種情況下是否有用?
還有其他建議嗎?
按照其他答案中的描述使用LIKE
將不起作用,因為要搜索的文本不是數據庫內容的子字符串(根據您的示例)。 根據您的情況,有兩種方法可以解決此問題。
如果您事先知道可能會提供的不同字符串,則可以創建另一個表aliases
來存儲這些字符串,並使用外鍵將它們鏈接到主表。
如果您不預先知道它們,可能是因為它們是用戶提供的搜索詞,那么您將需要動態構建一個查詢,該查詢將分解這些詞並分別進行搜索,如下所示:
SELECT ...
FROM table
WHERE field LIKE '%Mobile%'
OR field LIKE '%phone%'
OR field LIKE '%SAMSUNG%'
OR field LIKE '%GALAXY%'
OR field LIKE '%S5%'
OR field LIKE '%WHITE%'
盡管類似這樣的方法可以找到正確的結果,但它也可能返回假陽性(即也返回帶有單詞“ white”或“ phone”的任何內容),因此這可能不是可行的方法。
如果在MySQL <= 5.5上使用MyISAM表,在MySQL> = 5.6上使用MyISAM或InnoDB表,則可以使用全文本搜索和匹配/反對,如下所示:
SELECT MATCH( field ) AGAINST ( 'Mobile', 'phone', 'SAMSUNG', 'GALAXY', 'S5', 'WHITE' ) as relevance
FROM table
WHERE MATCH( field ) AGAINST ( 'Mobile', 'phone', 'SAMSUNG', 'GALAXY', 'S5', 'WHITE' IN BOOLEAN MODE)
ORDER BY relevance DESC
這不僅會找到匹配的行,而且還會按相關性(即匹配的數量)對它們進行排序。 如果您知道最相關的匹配是正確的匹配,則可以將此行限制為1行,也可以顯示以最相關的開頭的選項列表。
有關更多信息,請查閱全文搜索功能的文檔頁面。
使用SQL:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE %pattern%;
這將像您的價值一樣從您的列名中進行選擇。 通配符%
替代零個或多個字符。 這是一些like
文件
檢查“贊”可能對mysql很有幫助
您可以這樣寫:
SELECT column_name
FROM table_name
WHERE column_name LIKE %key%;
您將得到column_name包含鍵的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.