Добавьте векторный поиск Firestore в свои мобильные приложения с помощью расширений Firebase

1. Обзор

В этой лаборатории вы узнаете, как добавить в свое приложение мощные функции поиска с помощью поиска по векторному сходству Firestore . Вы реализуете функцию семантического поиска для приложения для создания заметок, написанного на Swift и SwiftUI.

Консоль Cloud Firestore, показывающая некоторые документы, которые также видны в приложении iOS справа.

Что вы узнаете

  • Как установить расширение Vector Search с Firestore для вычисления вложений векторов.
  • Как вызвать облачные функции Firebase из приложения Swift.
  • Как предварительно фильтровать данные на основе вошедшего в систему пользователя.

Что вам понадобится

  • Хкод 15.3
  • Пример кода Codelab. Вы загрузите его на более позднем этапе работы с кодом.

2. Создайте и настройте проект Firebase.

Чтобы использовать расширение Firebase Vector Search, вам понадобится проект Firebase. В этой части лабораторной работы вы создадите новый проект Firebase и активируете необходимые службы, такие как Cloud Firestore и Firebase Authentication.

Создать проект Firebase

  1. Войдите в Firebase
  2. В консоли Firebase нажмите «Добавить проект» и назовите свой проект Лаборатория векторного поиска Firestore. Создание проекта, шаг 1 из 3: выбор названия проекта
  3. Просмотрите параметры создания проекта. Примите условия Firebase, если будет предложено.
  4. На экране Google Analytics снимите флажок «Включить Google Analytics для этого проекта» , поскольку вы не будете использовать Analytics для этого приложения.
  5. Наконец, нажмите «Создать проект» .

Дополнительные сведения о проектах Firebase см. в разделе Общие сведения о проектах Firebase .

Обновите тарифный план Firebase

Чтобы использовать расширения Firebase и лежащие в их основе облачные сервисы, ваш проект Firebase должен находиться на тарифном плане с оплатой по мере использования (Blaze) , что означает, что он связан с учетной записью для выставления счетов в облаке .

Чтобы обновить проект до плана Blaze, выполните следующие действия:

  1. В консоли Firebase выберите обновление плана .
  2. Выберите план Blaze. Следуйте инструкциям на экране, чтобы связать учетную запись Cloud Billing с вашим проектом.
    Если вам нужно было создать учетную запись Cloud Billing в рамках этого обновления, вам может потребоваться вернуться к процессу обновления в консоли Firebase, чтобы завершить обновление.

Включите и настройте продукты Firebase в консоли.

Приложение, которое вы создаете, использует несколько продуктов Firebase, доступных для приложений Apple:

  • Аутентификация Firebase , позволяющая пользователям легко входить в ваше приложение.
  • Cloud Firestore для сохранения структурированных данных в облаке и мгновенного получения уведомлений при изменении данных.
  • Правила безопасности Firebase для защиты вашей базы данных.

Некоторые из этих продуктов требуют специальной настройки или их необходимо включить с помощью консоли Firebase.

Включить анонимную аутентификацию для аутентификации Firebase

В этом приложении используется анонимная аутентификация , позволяющая пользователям начать использовать приложение без предварительного создания учетной записи. Это приводит к упрощению процесса адаптации. Чтобы узнать больше об анонимной аутентификации (и о том, как перейти на именованную учетную запись), см. Рекомендации по анонимной аутентификации .

  1. На левой панели консоли Firebase нажмите «Создать» > «Аутентификация» . Затем нажмите «Начать» . Включение аутентификации Firebase
  2. Теперь вы находитесь на панели проверки подлинности, где можете видеть зарегистрированных пользователей, настраивать поставщиков входа и управлять параметрами.
  3. Выберите вкладку «Метод входа» (или нажмите здесь, чтобы перейти непосредственно на вкладку).
  4. Нажмите «Анонимно» в параметрах поставщика, переключите переключатель на «Включить » и нажмите «Сохранить» .

Настройте Cloud Firestore

Это приложение Swift использует Cloud Firestore для сохранения заметок.

Вот как настроить Cloud Firestore в вашем проекте Firebase:

  1. На левой панели консоли Firebase разверните «Сборка» и выберите «База данных Firestore» .
  2. Нажмите Создать базу данных .
  3. Оставьте для идентификатора базы данных значение (default) .
  4. Выберите местоположение для вашей базы данных, затем нажмите «Далее» .
    Для реального приложения вам нужно выбрать местоположение, наиболее близкое к вашим пользователям.
  5. Нажмите «Запустить в тестовом режиме» . Прочтите отказ от ответственности о правилах безопасности.
    Позже в этой лабораторной работе вы добавите правила безопасности для защиты ваших данных. Не распространяйте и не публикуйте приложение без добавления правил безопасности для вашей базы данных.
  6. Нажмите Создать .

Настройка облачного хранилища для Firebase

Веб-приложение использует Cloud Storage for Firebase для хранения, загрузки и обмена изображениями.

Вот как настроить Cloud Storage для Firebase в вашем проекте Firebase:

  1. На левой панели консоли Firebase разверните «Сборка» и выберите «Хранилище» .
  2. Нажмите «Начать» .
  3. Выберите расположение для сегмента хранилища по умолчанию.
    Сегменты в US-WEST1 , US-CENTRAL1 и US-EAST1 могут использовать преимущества уровня «Всегда бесплатно» для Google Cloud Storage. Во всех остальных местах сегменты соответствуют ценам и использованию Google Cloud Storage .
  4. Нажмите «Запустить в тестовом режиме» . Прочтите отказ от ответственности о правилах безопасности.
    Позже в этой лабораторной работе вы добавите правила безопасности для защиты ваших данных. Не распространяйте и не публикуйте приложение без добавления правил безопасности для сегмента хранилища.
  5. Нажмите Создать .

3. Подключите мобильное приложение

В этом разделе лаборатории кода вы загрузите исходный код простого приложения для создания заметок и подключите его к только что созданному проекту Firebase.

Загрузите образец приложения

  1. Перейдите на https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios и клонируйте репозиторий на свой локальный компьютер.
  2. Откройте проект Notes.xcodeproj в Xcode.

Подключите приложение к своему проекту Firebase

Чтобы ваше приложение могло получить доступ к сервисам Firebase, вам необходимо настроить его в консоли Firebase. Вы можете подключить несколько клиентских приложений к одному и тому же проекту Firebase. Например, если вы создаете Android-приложение или веб-приложение, вам следует подключить их к одному и тому же проекту Firebase.

Дополнительные сведения о проектах Firebase см. в разделе Общие сведения о проектах Firebase .

  1. В консоли Firebase перейдите на страницу обзора вашего проекта Firebase. Обзорная страница консоли Firebase
  2. Нажмите на значок iOS+, чтобы добавить приложение для iOS.
  3. На экране «Добавить Firebase в приложение Apple» вставьте идентификатор пакета из проекта Xcode ( com.google.firebase.codelab.Notes ).
  4. Если хотите, вы можете ввести псевдоним приложения ( Заметки для iOS ).
  5. Нажмите «Зарегистрировать приложение», чтобы перейти к следующему шагу.
  6. Загрузите файл GoogleServices-Info.plist .
  7. Перетащите GoogleServices-Info.plist в папку Notes вашего проекта Xcode. Хороший способ сделать это — поместить его под файл Assets.xcassets . Перетаскивание файла plist в Xcode
  8. При необходимости выберите «Копировать элементы» , убедитесь, что в поле «Добавить к целям» выбрана цель «Заметки» , и нажмите «Готово» . Выбор «Копировать при необходимости» в диалоговом окне выбора параметров добавления файлов.
  9. В консоли Firebase теперь вы можете выполнить оставшуюся часть процесса установки: в образце, который вы скачали в начале этого раздела, уже установлен Firebase Apple SDK и настроена инициализация. Вы можете завершить процесс, нажав Продолжить работу с консолью .

Запустите приложение

Пришло время опробовать приложение!

  1. Вернувшись в Xcode, запустите приложение на симуляторе iOS. В раскрывающемся списке «Назначения запуска» сначала выберите один из симуляторов iOS. Выбор симулятора iOS в раскрывающемся списке «Назначения запуска»
  2. Затем нажмите кнопку «Выполнить» или нажмите ⌘ + R.
  3. После успешного запуска приложения в симуляторе добавьте пару заметок.
  4. В консоли Firebase перейдите к браузеру данных Firestore, чтобы вы могли видеть новые документы, создаваемые по мере добавления новых заметок в приложение. Консоль Cloud Firestore, показывающая некоторые документы, а также симулятор iOS, который показывает те же документы.

4. Установите расширение Vector Search с Firestore.

В этой части лабораторной работы вы установите расширение Vector Search с Firestore и настроите его в соответствии с требованиями приложения для создания заметок, над которым вы работаете.

Начать установку расширения

  1. В разделе Firestore нажмите вкладку «Расширения» . Выбор вкладки «Расширения Firebase» в консоли Firestore.
  2. Нажмите «Изучить центр расширений». Вкладка «Расширения Firebase» в консоли Firestore.
  3. Введите «вектор».
  4. Нажмите «Векторный поиск с расширением Firestore». Целевая страница Firebase Extensios Hub Вы перейдете на страницу сведений о расширении, где сможете узнать больше о расширении, о том, как оно работает, какие службы Firebase ему требуются и как его настроить.
  5. Нажмите «Установить» в консоли Firebase . Кнопка установки расширения Vector Search with Firestore
  6. Вам будет представлен список всех ваших проектов.
  7. Выберите проект, который вы создали на первом этапе этой лаборатории кода. Экран выбора проекта Firebase

Настроить расширение

  1. Проверьте включенные API и созданные ресурсы. Проверка включенных API
  2. Включите необходимые службы. Включение необходимых сервисов
  3. После включения всех служб нажмите «Далее» . Нажмите «Далее» после включения всех служб.
  4. Проверьте доступ, предоставленный этому расширению.
  5. Настройте расширение:
    • Выберите Vertex AI в качестве LLM
    • Путь коллекции : примечания
    • Ограничение запросов по умолчанию : 3
    • Имя поля ввода : текст
    • Имя выходного поля: внедрение
    • Имя поля статуса: * *статус*
    • Вставка существующих документов : Да
    • Обновить существующие документы : Да
    • Местоположение облачной функции : us-central1
  6. Нажмите «Установить расширение», чтобы завершить установку.

Это может занять пару минут. Пока вы ждете завершения установки, смело переходите к следующему разделу руководства и прочитайте некоторую справочную информацию о векторных встраиваниях.

5. Предыстория

Пока вы ждете завершения установки, вот некоторая справочная информация о том, как работает векторный поиск с расширением Firestore.

Что такое векторы, вложения и базы данных векторов?

  • Векторы — это математические объекты, которые представляют величину и направление величины. Их можно использовать для представления данных таким образом, чтобы их было легче сравнивать и искать.
  • Вложения — это векторы, которые представляют значение слова или фразы. Они создаются путем обучения нейронной сети на большом корпусе текста и изучения связей между словами.
  • Векторные базы данных — это базы данных, оптимизированные для хранения и поиска векторных данных. Они обеспечивают эффективный поиск ближайших соседей, который представляет собой процесс поиска векторов, наиболее похожих на заданный вектор запроса.

Как работает векторный поиск?

Векторный поиск работает путем сравнения вектора запроса со всеми векторами в базе данных. В качестве результатов поиска возвращаются векторы, наиболее похожие на вектор запроса.

Сходство между двумя векторами можно измерить с помощью различных показателей расстояния. Наиболее распространенной метрикой расстояния является косинус-подобие, которое измеряет угол между двумя векторами.

6. Попробуйте векторный поиск с расширением Firestore.

Прежде чем использовать расширение Vector Search с Firestore в приложении iOS, которое вы загрузили ранее в этой лаборатории кода, вы можете опробовать расширение в консоли Firebase.

Прочтите документацию

Расширения Firebase включают документацию о том, как они работают.

  1. После завершения установки расширения нажмите кнопку «Начать» . Страница обзора расширения Firebase в консоли Firebase
  2. Посетите вкладку «Как работает это расширение» — там объясняется:
    • как вычислять вложения для документов, добавляя их в коллекцию notes ,
    • как запросить индекс, вызвав вызываемую функцию ext-firestore-vector-search-queryCallable ,
    • или как запросить индекс, добавив документ запроса в коллекцию _firestore-vector-search/index/queries .
    • Здесь также объясняется, как настроить пользовательскую функцию внедрения — это полезно, если ни один из LLM, поддерживаемых расширением, не соответствует вашим требованиям, и вы хотите использовать другой LLM для вычисления внедрений. Документация по векторному поиску с расширением Firestore.
  3. Нажмите ссылку на панель управления Cloud Firestore , чтобы перейти к экземпляру Firestore.
  4. Перейдите к документу _firestore-vector-search/index . Оно должно показать, что расширение завершило вычисление вложений для всех документов заметок, которые вы создали на предыдущем этапе этой лаборатории кода. Конфигурация индекса внутри консоли Firestore
  5. Чтобы убедиться в этом, откройте один из документов заметок, и вы должны увидеть дополнительное поле с именем embedding типа vector<768> , а также поле status . Поле векторного внедрения внутри консоли Firestore.

Создать образец документа

Вы можете создать новый документ в консоли Firebase, чтобы увидеть расширение в действии.

  1. Продолжая работать в браузере данных Firestore, перейдите к коллекции notes и нажмите + Добавить документ в среднем столбце. Добавление нового документа
  2. Нажмите «Автоидентификация» , чтобы создать новый уникальный идентификатор документа.
  3. Добавьте поле с именем text типа string и вставьте текст в поле значения . Важно, что это не lorem ipsum или какой-то другой случайный текст. Например, выберите новостную статью. Добавление текстового поля
  4. Нажмите Сохранить .
    • Обратите внимание, как расширение добавляет поле статуса, указывающее на обработку данных.
    • Через некоторое время вы должны увидеть embedding нового поля со значением vector<768> .
    Обновление статуса векторных вложений для нового документа

Выполнить запрос

Расширение Vector Search с Firestore имеет изящную небольшую функцию, которая позволяет вам запрашивать индекс документа без необходимости подключения приложения.

  1. В разделе Firestore консоли Firebase перейдите к документу _firestore-vector-search/index
  2. Нажмите + Начать сбор. Добавление новой подколлекции
  3. Создайте новую подколлекцию с именами queries
  4. Создайте новый документ и задайте в поле query текст, который встречается в одном из ваших документов. Лучше всего это работает для семантических запросов, таких как «Как сопоставить документы Firestore с помощью Swift» (при условии, что хотя бы одна из добавленных вами заметок содержит текст, обсуждающий эту тему). Добавление поля запроса
  5. Вы можете увидеть ошибку в статусе Произошла ошибка
  6. Это связано с отсутствием индекса. Чтобы настроить недостающую конфигурацию индекса, перейдите в консоль Google Cloud для своего проекта, перейдя по этой ссылке , а затем выбрав свой проект из списка. Выбор правильного проекта
  7. В Cloud Log Explorer теперь должно появиться сообщение об ошибке «FAILED_PRECONDITION: отсутствует конфигурация векторного индекса. Создайте необходимый индекс с помощью следующей команды gcloud: ...» Сообщение об ошибке в обозревателе журналов
  8. Сообщение об ошибке также содержит команду gcloud , которую необходимо запустить, чтобы настроить отсутствующий индекс.
  9. Запустите следующую команду из командной строки. Если на вашем компьютере не установлен интерфейс командной строки gcloud , следуйте инструкциям здесь, чтобы установить его.
    gcloud alpha firestore indexes composite create --project=INSERT-YOUR=PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
    
    Создание индекса занимает несколько минут. Вы можете проверить прогресс на вкладке «Индексы» в разделе Firestore консоли Firebase. Статус нового индекса
  10. После настройки индекса вы можете создать новый документ запроса.
  11. Теперь вы должны увидеть список совпадающих идентификаторов документов в поле результатов. Результат выполнения семантического запроса
  12. Скопируйте один из этих идентификаторов и вернитесь к коллекции notes .
  13. Используйте ⌘+F для поиска идентификатора скопированного вами документа — этот документ лучше всего соответствует вашему запросу. Нахождение идентификатора документа в списке документов

7. Реализуйте семантический поиск

Наконец-то пришло время подключить ваше мобильное приложение к расширению Vector Search с Firestore и реализовать функцию семантического поиска, которая позволит вашим пользователям искать свои заметки, используя запросы на естественном языке.

Подключите вызываемую функцию для выполнения запросов

Расширение Vector Search с Firestore включает облачную функцию, которую вы можете вызвать из своего мобильного приложения для запроса индекса, созданного вами ранее в этой лаборатории кода. На этом этапе вы установите соединение между вашим мобильным приложением и этой вызываемой функцией. Swift SDK от Firebase включает API, которые упрощают вызов удаленных функций.

  1. Вернитесь в Xcode и убедитесь, что вы находитесь в проекте, который вы клонировали на предыдущем этапе этой лаборатории кода.
  2. Откройте файл NotesRepository.swift .
  3. Найдите строку, содержащую private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("") private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("")

Чтобы вызвать вызываемую облачную функцию, вам необходимо указать имя функции, которую вы хотите вызвать.

  1. Перейдите в консоль Firebase для своего проекта и откройте пункт меню «Функции» в разделе «Сборка» .
  2. Вы увидите список функций, которые были установлены расширением.
  3. Найдите файл с именем ext-firestore-vector-search-queryCallable и скопируйте его имя.
  4. Вставьте имя в свой код. Теперь должно читаться
    private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
    

Вызов функции запроса

  1. Найдите метод performQuery
  2. Вызовите вызываемую функцию, вызвав
    let result = try await vectorSearchQueryCallable(searchTerm)
    

Поскольку это удаленный вызов, он может завершиться неудачно.

  1. Добавьте базовую обработку ошибок, чтобы выявлять любые ошибки и регистрировать их в консоли Xcode.
    private func performQuery(searchTerm: String) async -> [String] {
      do {
        let result = try await vectorSearchQueryCallable(searchTerm)
        return [result]
      }
      catch {
        print(error.localizedDescription)
        return []
      }
    }
    

Подключите пользовательский интерфейс

Чтобы пользователи могли искать свои заметки, вы добавите панель поиска на экране списка заметок. Когда пользователь вводит поисковый запрос, вам необходимо вызвать метод performQuery который вы реализовали на предыдущем шаге. Благодаря модификаторам searchable и просмотра task , предоставляемым SwiftUI, для этого требуется всего пара строк кода.

  1. Сначала откройте NotesListScreen.swift
  2. Чтобы добавить поле поиска в представление списка, добавьте модификатор представления .searchable(text: $searchTerm, prompt: "Search") чуть выше строки .navigationTitle("Notes")
  3. Затем вызовите функцию поиска, добавив следующий код чуть ниже:
.task(id: searchTerm, debounce: .milliseconds(800)) {
  await notesRepository.semanticSearch(searchTerm: searchTerm)
}

Этот фрагмент кода асинхронно вызывает ваш метод semanticSearch . Предоставляя тайм-аут в 800 миллисекунд, вы указываете модификатору задачи уменьшить дребезг ввода пользователя на 0,8 секунды. Это означает, что semanticSearch будет вызываться только в том случае, если пользователь приостанавливает ввод текста более чем на 0,8 секунды.

Теперь ваш код должен выглядеть так:

...
List(repository.notes) { note in
  NavigationLink(value: note) {
    NoteRowView(note: note)
  }
  .swipeActions {
    Button(role: .destructive, action: { deleteNote(note: note) }) {
      Label("Delete", systemImage: "trash")
    }
  }
}
.searchable(text: $searchTerm, prompt: "Search")
.task(id: searchTerm, debounce: .milliseconds(800)) {
  await notesRepository.semanticSearch(searchTerm: searchTerm)
}
.navigationTitle("Notes")
...

Запустите приложение

  1. Нажмите ⌘ + R (или нажмите кнопку «Выполнить»), чтобы запустить приложение в симуляторе iOS.
  2. Вы должны увидеть те же заметки, которые вы добавили в приложение ранее в этой лаборатории кода, а также любые заметки, добавленные вами через консоль Firebase.
  3. Вы должны увидеть поле поиска вверху списка заметок .
  4. Введите термин, который встречается в одном из добавленных вами документов. Опять же, это лучше всего работает для семантических запросов, таких как «Как я могу вызвать асинхронные API-интерфейсы Firebase из Swift» (при условии, что хотя бы одна из добавленных вами заметок содержит текст, обсуждающий эту тему).
  5. Вероятно, вы ожидаете увидеть результат поиска, но вместо этого представление списка пусто, а консоль Xcode отображает сообщение об ошибке: «Функция была вызвана с недопустимым аргументом».

Приложение «Заметки» с пустым списком результатов.

Это означает, что вы отправили данные в неправильном формате.

Анализ сообщения об ошибке

  1. Чтобы узнать, в чем дело, перейдите в консоль Firebase.
  2. Перейдите в раздел Функции
  3. Найдите функцию ext-firestore-vector-search-queryCallable , откройте меню переполнения, нажав на три вертикальные точки.
  4. Выберите «Просмотр журналов» , чтобы перейти к проводнику журналов.
  5. Вы должны увидеть ошибку
Unhandled error ZodError: [
  {
    "code": "invalid_type",
    "expected": "object",
    "received": "string",
    "path": [],
    "message": "Expected object, received string"
  }
]

Это означает, что вы отправили данные в неправильном формате.

Используйте правильные типы данных

Чтобы узнать, в каком формате расширение ожидает параметры, ознакомьтесь с документацией расширения.

  1. Перейдите в раздел «Расширения» на консоли Firebase.
  2. Нажмите «Управление» -> Управление векторным поиском с помощью расширения Firestore
  3. В разделе «Как работает это расширение» вы найдете спецификацию входных и выходных параметров. Документирование входного параметра и значения результата
  4. Вернитесь в Xcode и перейдите к NotesRepository.swift
  5. Добавьте следующий код в начало файла:
    private struct QueryRequest: Codable {
      var query: String
      var limit: Int?
      var prefilters: [QueryFilter]?
    }
    
    private struct QueryFilter: Codable {
      var field: String
      var `operator`: String
      var value: String
    
    }
    
    private struct QueryResponse: Codable {
      var ids: [String]
    }
    
    QueryRequest соответствует структуре входного параметра, ожидаемого расширением, согласно документации расширения. Он также содержит вложенный атрибут prefilter , который понадобится вам позже. QueryResponse соответствует структуре ответа расширения.
  6. Найдите спецификацию вызываемой функции и обновите типы ввода и вывода.
    private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
    
  7. Обновите вызов вызываемой функции в performQuery
    private func performQuery(searchTerm: String) async -> [String] {
      do {
        let queryRequest = QueryRequest(query: searchTerm,
                                        limit: 2)
        let result = try await vectorSearchQueryCallable(queryRequest)
        print(result.ids)
        return result.ids
      }
      catch {
        print(error.localizedDescription)
        return []
      }
    }
    

Запустите приложение еще раз

  1. Запустите приложение еще раз
  2. Введите поисковый запрос, содержащий термины, включенные в одну из ваших заметок.
  3. Теперь вы должны увидеть отфильтрованный список заметок.

Скриншот приложения с ожидаемым результатом

Предварительная фильтрация пользовательских данных

Прежде чем вы начнете танцевать, чтобы отпраздновать - есть проблема с текущей версией приложения: набор результатов содержит данные всех пользователей.

Вы можете убедиться в этом, запустив приложение на другом симуляторе и добавив дополнительные документы. Новые документы будут отображаться только в этом симуляторе. Если вы снова запустите приложение на другом симуляторе, вы увидите только документы, созданные вами в первый раз.

Если вы выполните поиск, вы заметите, что вызов vectorSearchQueryCallable возвращает идентификаторы документов, которые могут принадлежать другому пользователю. Чтобы этого не произошло, нам нужно использовать префильтр .

В performQuery обновите свой код следующим образом:

  let prefilters: [QueryFilter] = if let uid = user?.uid {
    [QueryFilter(field: "userId", operator: "==", value: uid)]
  }
  else {
    []
  }

  let queryRequest = QueryRequest(query: searchTerm,
                                  limit: 2,
                                  prefilters: prefilters)

Это приведет к предварительной фильтрации данных на основе идентификатора вошедшего в систему пользователя. Как и следовало ожидать, для этого необходимо обновить индекс Firestore.

Запустите следующую команду из командной строки, чтобы определить новый индекс Firestore, который включает в себя как идентификатор userId , так и векторные внедрения в поле embedding .

gcloud alpha firestore indexes composite create --project=INSERT-YOUR-PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=order=ASCENDING,field-path=userId --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding

После завершения построения индекса запустите приложение еще раз, чтобы убедиться, что оно работает должным образом.

Предварительно отфильтрованный набор результатов

8. Поздравления

Поздравляем с успешным завершением этой лаборатории!

В этой лаборатории вы узнали, как:

  • Настройте базу данных Cloud Firestore с включенным семантическим поиском.
  • Создайте простое приложение SwiftUI для взаимодействия с базой данных.
  • Реализуйте панель поиска, используя модификатор просмотра SwiftUI с возможностью поиска и модификатор задачи.
  • Вызовите облачную функцию, чтобы выполнить семантический поиск в базе данных, используя интерфейс Callable Firestore SDK.

Благодаря знаниям, полученным в ходе этой лабораторной работы, вы теперь можете создавать мощные приложения, использующие возможности семантического поиска Cloud Firestore, чтобы предоставить пользователям более интуитивно понятный и эффективный поиск.

Чтобы узнать больше о новом векторном поле Firestore и о том, как вычислять векторные представления, ознакомьтесь с документацией .