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