有人可以解释一下,我的 mysql 匹配为什么不工作

问题描述

我在链接列上使用 MysqL 全文

但有时文本匹配,有时不起作用

我有例子

http://sqlfiddle.com/#!9/470eb28/6

List<WebElement> tableCells = row.findElements(By.xpath(".//td"));

查询

CREATE TABLE domains
    (`name` varchar(300))
 ENGINE=InnoDB;
    
INSERT INTO domains
    (`name`)
VALUES
    ('https://www.google.com'),('https://www.yahoo.com'),('https://www.instagram.com/painfreestrength/')
;

CREATE FULLTEXT INDEX idx_1 ON domains (`name`);

解决方法

匹配将要求您使用整个单词

select * from domains where MATCH(`name`) AGAINST('wholeword') 

即为您的情况

select * 
from domains where MATCH(`name`) AGAINST('"https://www.instagram.com/painfreestrength/"')

select * 
from domains where MATCH(`name`) AGAINST('"painfreestrength"')

select * 
from domains where MATCH(`name`) AGAINST('"instagram"')

但是如果你必须使用 painfrees

使用 likeregex

select * from domains where name like "%painfrees%"

select * from domains where REGEXP_LIKE(name,'painfrees')
,

试试这个

select * from domains where name like '%painfrees%';
,

在针对大型数据库的性能方面,您无法使其更高效,尤其是当您应该使用 LIKE 模式时,假设表结构与您在问题中提出的完全一样,假设您已经有了索引列。

一种可行的方法是使用“名称”列按字母顺序优化数据库,并限制您对 N 行的搜索,这将大大改善您的查询。

您可以做的另一件事是提取根域并将其保存在另一列中,这将提高性能。