我想在我的网站上创建搜索系统,但是有一些问题。

我有两个表,名字分别是商店和产品。
我在桌子上有一些商店,也许有些商店没有产品。
如果每个客户都搜索某词,如果单词与商店名称匹配,则首先查询商店信息,然后如果我们有一些商店产品与此单词匹配,则添加到列表中。它具有相关性查询。


  我的表引擎是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

10-06 16:07
查看更多