问题描述
但有时文本匹配,有时不起作用
我有例子
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
使用 like
或 regex
select * from domains where name like "%painfrees%"
select * from domains where REGEXP_LIKE(name,'painfrees')
,
试试这个
select * from domains where name like '%painfrees%';
,
在针对大型数据库的性能方面,您无法使其更高效,尤其是当您应该使用 LIKE 模式时,假设表结构与您在问题中提出的完全一样,假设您已经有了索引列。
一种可行的方法是使用“名称”列按字母顺序优化数据库,并限制您对 N 行的搜索,这将大大改善您的查询。
您可以做的另一件事是提取根域并将其保存在另一列中,这将提高性能。