【问题标题】:Can I use full-text mysql query in subquery in clause from我可以在子查询的子查询中使用全文 mysql 查询吗
【发布时间】:2015-10-18 12:42:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql full-text-search subquery left-join


    【解决方案1】:

    您可能需要将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
    

    【讨论】:

    • 我之前为这些表添加了全文索引,但我认为当子查询创建新表时它不支持全文。
    • 我写了这段代码,但它有一个问题。因为如果客户搜索商店名称,则得到商店和商店产品的 n 个数量。对于这个问题,我使用子查询并在 from 子句中为产品左连接
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 2013-03-05
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2015-09-11
    相关资源
    最近更新 更多