🔍 Поиск и фильтрация в Supabase

Supabase предоставляет несколько способов поиска данных: от простого встроенного фильтра FlutterFlow до сложных SQL-выражений через API.

Используйте штатный механизм FlutterFlow для небольших таблиц.


🛠 Вариант 2: Поиск через API по нескольким полям

Если нужно искать одно и то же слово сразу в нескольких колонках (OR), используйте следующий формат URL в API запросе:

https://[PROJECT].supabase.co/rest/v1/services?or=(serviceName.ilike.%[name]%,description.ilike.%[name]%)

ilike

Оператор ilike в PostgreSQL выполняет поиск без учета регистра.


⚡️ Вариант 3: Сложный поиск по словам (AND поиск)

Когда порядок слов в запросе не совпадает с порядком в базе (например, “басс зелен красив” для “красивый зеленый бассейн”).

Реализация через Code Expression во FlutterFlow:

Для каждого слова создайте отдельный фильтр LIKE и используйте код для извлечения слов из строки поиска.

Первое слово:

'%${var1.split(' ')[0]}%'

Второе слово:

'%${var1.split(' ').length > 1 ? var1.split(' ')[1] : ''}%'

(И так далее для каждого фильтра).


Если данных много, лучше использовать векторный поиск (Embeddings). Это позволяет искать не только по точным совпадениям, но и по смыслу.


🐞 Решение проблемы пустых аргументов

Если вы передаете фильтр в API, и он пустой, запрос может упасть. Решение: Используйте Custom Function, которая возвращает & вместо null, если аргумент пустой.

String? idFilter(int? id) {
  if (id != null) {
    return 'comid=eq.$id&';
  }
  return '&';
}

Смотрите также: Индекс Supabase