如果客户搜索两个或多个关键字,我需要返回两组MySQL结果:
1)主要结果:这些关键词的相交(项目只匹配所有关键字)
2)次要结果:匹配关键词的对称差分/析取合并项(匹配某些关键字,而不是所有关键字)
我可以使用布尔模式在每个关键字之前使用一个+符号来执行查询#1。我可以通过退出+签名来执行包含#1和#2的查询,但是我不知道如何获得第2中描述的预期结果。有什么建议吗?
发布于 2020-03-13 11:11:45
对于#2,您只需要以下几个方面的组合:
WHERE MATCH(words) AGAINST('keyword1 keyword2 ... keywordN' IN BOOLEAN MODE)
AND NOT MATCH(words) AGAINST('+keyword1 +keyword2 ... +keywordN IN BOOLEAN MODE)这将返回至少有一个关键字但不是全部的行。还是我误解了你的问题?
模式(MySQL v8.0)
create table test (
id int not null auto_increment primary key,
words text not null,
FULLTEXT idx (words)
);
insert into test(words)
values('Arc Book Cow Dog'), ('Book Cow Fox'), ('Arc Book Cow Fox'), ('Book Cow');查询#1
SELECT *
FROM test
WHERE MATCH(words) AGAINST('Arc Fox' IN BOOLEAN MODE)
AND NOT MATCH(words) AGAINST('+ARC +Fox' IN BOOLEAN MODE)
ORDER BY id;
| id | words |
| --- | ---------------- |
| 1 | Arc Book Cow Dog |
| 2 | Book Cow Fox |https://stackoverflow.com/questions/60668741
复制相似问题