gpt4 book ai didi

sql - 基于主题查找相似匹配但限制完全匹配的文本匹配 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 14:29:34 25 4
gpt4 key购买 nike

我正在创建一个错误跟踪工具并尝试添加查找类似错误的功能,但不包括您正在搜索的错误。我正在使用 Laravel 5.7/eloquent 和 postgreSQL。当前的原始查询如下所示:

SELECT 
*
FROM bugs
WHERE
subject::text like 'Delectus iusto est architecto magni expedita eum rerum consequatur.'
OR
description::text like 'Delectus iusto est architecto magni expedita eum rerum consequatur.'
AND
id <> 'e0433097-d2b0-49ac-8aea-fcdbefa378b5'

Eloquent 版本被提取到 BugSearch 类中,但本质上是这样做的:

$builder = DB::table('bugs');
$builder->where('subject', 'like', $bug->subject)
->orWhere('description', 'like', $bug->description);

并返回构建器,此时我尝试添加 where 子句:

$matches = $builder->where('id', '!=', $bug->id)->get();
return response()->json($matches);

这显然不适用于原始查询或 Eloquent 的查询生成器,因为两者都返回完全匹配,需要通过 where 子句过滤掉。

最佳答案

您没有在查询中明确说明什么“不起作用”...

但是根据您的帖子,您可能只是遇到了运算符优先问题。 and 的优先级高于 or,因此您可能希望将 or 括在括号中。

此外,如果您希望使用 LIKE 运算符,则需要用百分号 (%) 将搜索字符串括起来。

select * from bugs 
where
(
subject::text like '%Delectus iusto est architecto magni expedita eum rerum consequatur.%'
or description::text like '%Delectus iusto est architecto magni expedita eum rerum consequatur.%'
)
and id <> 'e0433097-d2b0-49ac-8aea-fcdbefa378b5'

没有括号,查询实际上等同于:

select * from bugs 
where
subject::text like 'Delectus iusto est architecto magni expedita eum rerum consequatur.'
or
(
or description::text like 'Delectus iusto est architecto magni expedita eum rerum consequatur.'
and id <> 'e0433097-d2b0-49ac-8aea-fcdbefa378b5'
)
order by created_at desc

关于sql - 基于主题查找相似匹配但限制完全匹配的文本匹配 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53733900/

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