Статьи

Couchbase: повышение производительности при запросе нескольких массивов с помощью FTS и N1QL

Вступление

Полнотекстовый поиск Couchbase (FTS) отлично подходит для индексации нескольких массивов и выполнения запросов с несколькими предикатами фильтра в массивах. В этой статье я продемонстрирую преимущества использования FTS над GSI (Global Secondary Index) для индексации массивов при работе с примером варианта использования, который требует запроса нескольких массивов. Мы будем создавать индекс для нескольких массивов FTS и запрашивать индекс с помощью N1QL с помощью новой функции SEARCH (), представленной в Couchbase Server 6.5.  

Ведро с образцом путешествия

В этой статье мы будем ссылаться на набор данных Travel Sample, доступный для установки в любом экземпляре Couchbase Server. Ведро с образцом путешествия имеет несколько различных типов документов: авиакомпания, маршрут, аэропорт, ориентир и гостиница. Модель документа для каждого вида документа содержит:

  • Ключ, который действует как первичный ключ

  • Поле id, которое идентифицирует документ

  • Поле типа, определяющее тип документа

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

Рисунок 1 — Пример документа отеля

Эта проблема

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

Рисунок 2. Массивы «public_likes» и «reviews» в примере документа гостиницы

Сначала давайте рассмотрим реализацию этого варианта использования с N1QL и GSI (Global Secondary Index). Чтобы найти отели, которые кому-либо по имени Ozella понравились или просмотрели, запрос может выглядеть следующим образом: 


SQL