Mysql

MySQL如何通過多個關鍵字對單列進行優先級排序

  • March 1, 2021

我有一列產品標題,我必須按輸入字元串中匹配的最大單詞的結果排序

Select Id, tittle, description,.....,
Case 
When a.title REGEXP [[:<:]]Men's shoes[[:>:]] Then 0
When a.title REGEXP [[:<:]]Men's[[:>:]] Then 1
When a.title REGEXP [[:<:]]shoes[[:>:]] Then 2 END AS priority
From products 
.
.
.

Order by priority ASC

它工作正常,當字元串按順序排列時,但我希望按最大匹配字數排序,或者將第一優先級分配給具有最大字匹配的記錄

全文搜尋有很好的站點,但需要一些學習,但對於包含大量文本的大表來說很有趣。

您也可以組合列進行搜尋

還要檢查手冊

一個小例子它是如何工作的

CREATE TABLe t1 (title varchar(20),
          FULLTEXT (title))
insert into t1 VALUES ("men\'s t'shirts"),("men\'s socks"),("men\'s socks short")
SELECT * ,
(IF(MATCH (title)
        AGAINST ("men\'s" IN NATURAL LANGUAGE MODE) > 0,1,0) 
        )+
        (IF(MATCH (title)
        AGAINST ('socks' IN NATURAL LANGUAGE MODE) > 0,2,0) )
+
        (IF(MATCH (title)
        AGAINST ("+men\'s +socks" IN NATURAL LANGUAGE MODE) > 0.03,3,0))    as weight   
        FROM t1
標題 | 重量
:---------------- | -----:
男士T卹| 高解析度照片| CLIPARTO 1
男士襪子| 高解析度照片| CLIPARTO 6
男士短襪| 高解析度照片| CLIPARTO 6

db<>fiddle here 對於更大的搜尋和更多的可能性,您還可以查看elasticsearch

引用自:https://dba.stackexchange.com/questions/286219