gpt4 book ai didi

MySQL FULLTEXT 仅返回最佳答案

转载 作者:行者123 更新时间:2023-11-29 19:29:03 26 4
gpt4 key购买 nike

我正在尝试修改这篇文章中的完整路径检索代码: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/在嵌套集模型中使用 FULLTEXT 而不是完全匹配。

这就是我想要的:我想获得从 MATCH() AGAINST() 搜索的最佳匹配,而不是使用“=”符号仅查找这一个结果。

这是我尝试过的:

DELIMITER //
DROP PROCEDURE IF EXISTS find_node;
//

CREATE DEFINER = CURRENT_USER PROCEDURE find_node (
IN searched TEXT
)

proc: BEGIN

SELECT DISTINCT parent.content
FROM tree AS node,
tree AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.content = (SELECT content FROM tree WHERE MATCH(node.content) AGAINST(searched IN BOOLEAN MODE) LIMIT 1)
ORDER BY parent.lft;

END //
DELIMITER ;

行以 AND node.content 开头,但运行该过程后似乎没有返回任何结果。我还希望能够获得第二、第三和第 n 个最佳匹配(也许使用 LIMIT 1 OFFSET n,其中 n 是结果编号?)。

感谢您的帮助

最佳答案

这在逻辑上不合理。再次查看您的子查询。

SELECT content 
FROM tree /* << tree? */
WHERE MATCH(node.content) /* << node? */ ...

您的 table 是 tree 。指定与 node 中的列匹配没有对tree应用合理的选择标准但会匹配树中的每一行,就像你说 WHERE 1 一样或WHERE 1 = 1WHERE 2+2 != 5 ,或者 tree 中没有行,就像WHERE 1 = 0一样。服务器返回所有行,LIMIT 1,如果该 1 行未提供正确的“内容”,则外部查询不会返回任何行...或者子查询不会返回任何行,因为 WHERE是无法满足的。目前还不清楚,没有进一步分析,但正如所写,查询似乎没有达到您的预期。

我相信你的意图是这样的:

 WHERE MATCH(tree.content) AGAINST ...

我承认我并不完全相信该方法的有效性,作为您真正想要实现的目标的解决方案,但这似乎是一个逻辑错误,可以解释“没有结果”。

您可能还会在我对MYSQL matching one column to another in a different table via a FULLTEXT index的回答中发现值(value)。 dba.SE,数据库管理员的 Stack Exchange 站点。当然,通过“不同的表”,问题实际上涉及连接,因此该解决方案对于将表连接到自身也很有用。该解决方案使用存储函数来解除对引用 AGAINST() 中的列的限制。 ,您不需要,但它也可以处理 LIMIT 1这样你就可以得到一个标量值。

但是...如果您想要多行,标量子查询或存储函数似乎也不正确。您需要一个派生表,MySQL 将其称为 subquery in the FROM clause 。支持LIMIT派生表中的内容因服务器版本 IIRC 而异。

关于MySQL FULLTEXT 仅返回最佳答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com