簡體   English   中英

在SQL中匹配多個相似的字符串

[英]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.

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