MongoDB: Поиск по тексту и добавление данных

Создание коллекции и добавление данных

Добавим коллекцию articles. Вместо явного создания с помощью функции createCollection, добавим данные — коллекция создастся автоматически, если её ещё не существует.

Для добавления данных используем функцию insertMany, передавая ей массив из трёх объектов. Каждый объект представляет статью и содержит поля: title (заголовок), announcement (анонс), text (текст) и date (дата).

db.articles.insertMany([
  // ... (здесь вставляются три объекта с данными статей) ...
]);

После выполнения этого кода коллекция articles будет создана с тремя записями.

Создание текстовых индексов

Для эффективного поиска по тексту создадим текстовые индексы на полях title, announcement и text:

db.articles.createIndex({
  title: "text",
  announcement: "text",
  text: "text"
});

Эта команда создаёт текстовые индексы на указанных полях.

Поиск по фрагментам текста

Функция find с оператором $text позволяет искать фрагменты текста в индексированных полях:

db.articles.find({
  $text: {
    $search: "жители"
  }
});

Эта команда найдёт все записи, содержащие слово «жители» в полях title, announcement и text. Поиск без учёта регистра. Можно искать несколько слов, например: "новые жители". Найдены будут записи, содержащие оба слова, независимо от порядка.

Сортировка результатов по релевантности

Для сортировки результатов по релевантности используем поле score, автоматически добавляемое оператором $text. Значение score отражает степень соответствия документа запросу. Сортировка осуществляется функцией sort:

db.articles.find({
  $text: {
    $search: "открытие кофейни"
  }
}).sort({ score: { $meta: "textScore" } });

Результаты отсортированы по убыванию score, наиболее релевантные записи — первыми.

Текстовые индексы и оператор $text обеспечивают эффективный поиск по фрагментам текста в MongoDB. Сортировка по полю score отображает наиболее релевантные результаты первыми, подобно поисковым системам.

Что будем искать? Например,программа