如何使用mysql和php使mysql通过relavance搜索多个关键字

问题描述 投票:0回答:1

你好我有一个关于mysql搜索的问题 我有一个有很多产品的在线产品商店,所有记录都有 keyword 字段来存储用于搜索目的的关键字。数据是这样的

    A product_id=1  => keywords=laser wedding cake box
    B product_id=2  => keywords=red box
    C product_id=3  => keywords=laser card box
    D product_id=4  => keywords=wedding cake box etc....

如果我搜索

"laser wedding cake box"
我的要求是,结果应该如下 首先它应该返回包含

的所有记录
  • 所有四个字
  • 然后所有包含3个词的记录
  • 然后所有包含2个词的记录
  • 然后每个词的所有记录

所有的结果都应该按照给定的顺序附加到查询中

我在用

FULLTEXT with BOOLEAN MODE
。它适用于四个单词,但我无法附加其余部分。

你们能给我一些关于这个要求的信息吗 提前致谢

mysql full-text-search
1个回答
1
投票

您应该为每个关键字单独一行,而不是同一行中的所有关键字。

CREATE TABLE product_keywords (
    product_id INT,
    keyword VARCHAR(100),
    UNIQUE KEY (product_id, keyword),
    CONSTRAINT FOREIGN KEY (product_id) REFERENCES products (product_id)
);

INSERT INTO product_keywords (product_id, keyword) VALUES
(1, 'laser'), (1, 'wedding'), (1, 'cake'), (1, 'box'),
(2, 'red'), (2, 'box'),
(3, 'laser'), (3, 'card'), (3, 'box'),
(4, 'wedding', (4, 'cake'), (4, 'box');

然后你可以使用这样的查询:

SELECT p.name, p.product_id, COUNT(*) AS num_matches
FROM products AS p
JOIN product_keywords AS k ON p.product_id = k.product_id
WHERE k.keyword IN ('laser', 'wedding', 'cake', 'box')
ORDER BY num_matches DESC;
© www.soinside.com 2019 - 2024. All rights reserved.