🔍 Поиск и фильтрация в Supabase
Supabase предоставляет несколько способов поиска данных: от простого встроенного фильтра FlutterFlow до сложных SQL-выражений через API.
🟢 Вариант 1: Встроенный поиск (Simple Search)
Используйте штатный механизм FlutterFlow для небольших таблиц.
- 📺 Рецепт: Simplest way for Search in 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] : ''}%'(И так далее для каждого фильтра).
💡 Поиск по смыслу (Semantic Search)
Если данных много, лучше использовать векторный поиск (Embeddings). Это позволяет искать не только по точным совпадениям, но и по смыслу.
- Техника: Vector Search with Supabase
🐞 Решение проблемы пустых аргументов
Если вы передаете фильтр в API, и он пустой, запрос может упасть.
Решение: Используйте Custom Function, которая возвращает & вместо null, если аргумент пустой.
String? idFilter(int? id) {
if (id != null) {
return 'comid=eq.$id&';
}
return '&';
}Смотрите также: Индекс Supabase