gpt4 book ai didi

MySQL 对 JSON 数据的全文搜索

转载 作者:行者123 更新时间:2023-11-28 23:34:00 26 4
gpt4 key购买 nike

我正在尝试使用对 JSON 数据的全文搜索来复制以下 LIKE 查询;

SELECT * FROM table
WHERE response LIKE '%"prod_id": "foo"%'
AND response LIKE '%"start_date": "2016-07-13"%'

在我的数据库中,上述查询返回 28 行

这是我的尝试:

SELECT * FROM table
WHERE MATCH(response)
AGAINST('+"\"prod_id\": \"foo\"",+"\"start_date\": \"2016-07-13\""')

然而,这会返回超过 4,500 行(与仅针对 prod_id 运行第一个查询时仅在日期运行第一个查询时约 1,900 行相同)

据我了解,+"text here" 将指示一个必需的 词,并且文字双引号(存在于 JSON 中) data) 应该被转义,并且 , 将指示我正在寻找的两个字符串之间的拆分。我没有正确理解什么?无论如何,将其作为全文查询运行有什么意义吗?

最佳答案

感谢@Sevle,我像这样调整了我的查询,它返回了正确的结果;

SELECT * FROM table
WHERE MATCH(response)
AGAINST('+\"prod_id: foo\" +\"start_date: 2016-07-13\"' IN BOOLEAN MODE)

逗号没有帮助,我转义了错误的字符,当然我确实需要添加 IN BOOLEAN MODE。最后,我删除了我在 JSON 字符串中搜索的双引号。

可能还值得注意的是,由于我使用 PHP PDO 来运行此查询,因此我还必须进行以下调整。

而不是像往常那样尝试绑定(bind)变量来构建查询;

$query = $db->prepare('...AGAINST('+\"prod_id: :prod_id\" +\"start_date: :start_date\"');
$query->execute(array('prod_id' => 'foo', 'start_date' => '2016-07-13'));

我必须这样做,因为我发现 I could not bind variables in full text searches

$sql_against = $db->quote('...AGAINST('+\"prod_id: foo\" +\"start_date: 2016-07-13\"');
$query = $db->prepare("...AGAINST($sql_against IN BOOLEAN MODE)")

关于MySQL 对 JSON 数据的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36354790/

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