我通过一些对象的描述来编写全文搜索脚本。但是我对布尔模式下的默认全文搜索算法并不满意,所以我尝试以某种方式对其进行修改。我想将 3 个搜索合并为一个。第一个查询我搜索“确切的短语”,第二个 - 短语的所有单词,第三个 - 至少一个单词存在。然后优先归还。我必须做这样的事情:
SELECT
description,
MATCH(description) AGAINST ('"my search"' in boolean mode) FROM search
WHERE MATCH(description) AGAINST ('"my search"' in boolean mode)
UNION DISTINCT
SELECT
description,
MATCH(description) AGAINST ('+my +search' in boolean mode) FROM search
WHERE MATCH(description) AGAINST ('+my +search' in boolean mode)
UNION
SELECT
description,
MATCH(description) AGAINST ('my* search*' in boolean mode) FROM search
WHERE MATCH(description) AGAINST ('my* search*' in boolean mode)
如您所见,第一个行块将包含最相关的结果 - 确切的短语。第二个块将包含不太相关的行,第三个将包含所有其余的行。
但是这个查询返回重复的行,换句话说,存在于第一个块中的行,可以在第二个块或第三个块中再次重复,即使我使用 UNION DISTINCT。但我想为所有三个子选择获取全局不同的行集。如果行出现在第一个块中,那么它在秒和第三个中一定不存在。我怎样才能做到这一点?或者您可以为这种搜索提供更优雅的解决方案吗?