0

我正在使用 Supabase 作为数据库并尝试实现全文搜索。

我的示例设置非常简单,我有两个表:

项目

+----+-----------+-----------------+
| id | name      | manufacturer_id |
+----+-----------+-----------------+
| 1  | Notebook  | 1               |
+----+-----------+-----------------+
| 2  | Mouse     | 2               |
+----+-----------+-----------------+

制造商

+----+-----------+
| id | name      |
+----+-----------+
| 1  | Apple     |
+----+-----------+
| 2  | Microsoft |
+----+-----------+

我的目标:搜索项目名称或制造商名称并始终收到相应的items. 搜索“Apple”将返回制造商名称包含此短语的所有项目。搜索“笔记本”将返回具有此名称的所有项目。

我通过使用完全匹配来简化这个例子,因为这不是我遇到的问题)。

我目前的方法如下:

let keyword = 'Apple';

supabase
  .from('items')
  .select('*, manufacturers!inner(*)')
  .or(`name.eq.${term}`)
  .or(`name.eq.${term}`, { foreignTable: 'manufacturers' })

虽然这个查询没有返回任何东西。

如果我删除.or('name.eq.${term}')它返回正确的项目。如果我删除第二个.or()并使用项目名称作为我的关键字,则相同。

我根本找不到组合两个 OR 运算符的方法。我也尝试了多个filter()查询,但没有成功。

编辑:(工作)SQL 语法如下:

SELECT * FROM items 
   JOIN manufacturers ON items.manufacturer_id = manufacturers.id
   WHERE items.name = 'Apple' OR manufacturers.name = 'Apple'

有没有人有办法使用 Supabase JavaScript SDK 做到这一点?先感谢您!

4

0 回答 0