[英]How can I manipulate MySQL fulltext search relevance to make one field more 'valuable' than another?
[英]MySql FullText Search seems slow, How can I make this faster? Any Optimization required?
我有一个包含100万条记录的表,并希望应用更快的方法来针对任何搜索查询获取记录。 由于我对mysql全文搜索不好。
我做了以下测试:
MATCH AGAINS
应用于MATCH AGAINS
,它可以快速返回结果。 MATCH AGAINS
应用于两列,返回速度非常慢。 MATCH AGAINS
。 第一次返回时返回的速度非常慢,但是在使用相同搜索词的第二次尝试中返回的速度却相当快。 我的查询有任何问题,我应该如何通过更多优化对其进行修改?
select name, meaning, m.gender, m.similar
FROM
NAMES n
INNER JOIN meta m ON m.nameid = n.id
WHERE MATCH (nameandmeaning) AGAINST ('searchterm*' IN BOOLEAN MODE)
AND meaning IS NOT NULL
ORDER BY LENGTH(m.similar) DESC
LIMIT 0 , 10;
注: nameandmeaning
是联合而成的name, meaning
。
我的表结构如下:
CREATE TABLE NAMES (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
meaning VARCHAR(2000) DEFAULT NULL,
nameandmeaning VARCHAR(2000) DEFAULT NULL,
PRIMARY KEY (id),
FULLTEXT KEY constains_name(name,meaning),
FULLTEXT KEY contains_namemeaing (nameandmeaning)
) ENGINE=MYISAM AUTO_INCREMENT=67846 DEFAULT CHARSET=latin1;
CREATE TABLE NAMES (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
meaning VARCHAR(2000) DEFAULT NULL,
-- skip this: nameandmeaning VARCHAR(2000) DEFAULT NULL,
PRIMARY KEY (id),
FULLTEXT KEY constains_name(name, meaning),
-- skip this: FULLTEXT KEY contains_namemeaing (nameandmeaning)
) ENGINE=MYISAM AUTO_INCREMENT=67846 DEFAULT CHARSET=latin1;
然后这些应该可以快速工作:
MATCH(name) AGAINST (...)
MATCH(meaning) AGAINST (...)
MATCH(name, meaning) AGAINST (...)
升级到InnoDB时,应该具有以下所有三个功能(如果要执行所有这三个匹配):
FULLTEXT (name),
FULLTEXT (meaning),
FULLTEXT (name, meaning)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.