我想在我的网站上创建搜索系统,但是有一些问题。
我有两个表,名字分别是商店和产品。
我在桌子上有一些商店,也许有些商店没有产品。
如果每个客户都搜索某词,如果单词与商店名称匹配,则首先查询商店信息,然后如果我们有一些商店产品与此单词匹配,则添加到列表中。它具有相关性查询。
我的表引擎是innodb,版本是5.6+,错误消息是:
1214-使用的表类型不支持FULLTEXT索引
我使用此查询,但我知道这不是真的,并显示错误消息,但是我不知道如何解决该问题以执行我的想法。
select `shops`.`name`,`shops`.`nName`,`product`.`productname`,`product`.`productnName`,
((MATCH (`shops`.`name`,`shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) * 2) +
(MATCH (`product`.`productname`,`product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) * 1.5)) as `relevance`
from `shops` left OUTER JOIN
(select `productname`,`productnName`,`sId` from `product` where MATCH (`productname`,`productnName`) AGAINST ('apple' IN BOOLEAN MODE)) as `product` on (`product`.`sId`=`shops`.`id`)
where
(
MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) and
MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE)
)
or
MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE)
or
MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE)
ORDER BY `relevance` DESC
最佳答案
您可能需要向表中添加FULLTEXT
索引。
ALTER TABLE shops
ADD FULLTEXT INDEX (`name`,`nName`);
ALTER TABLE product
ADD FULLTEXT INDEX (`productname`,`productnName`);
编辑:我认为您正在丢失子选择中的全文本索引,请尝试一下。
select `shops`.`name`,`shops`.`nName`,`product`.`productname`,`product`.`productnName`,
((MATCH (`shops`.`name`,`shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) * 2) +
(MATCH (`product`.`productname`,`product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) * 1.5)) as `relevance`
from `shops`,`product`
where
MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE)
or
MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE)
ORDER BY `relevance` DESC