Создание коллекции и добавление данных
Добавим коллекцию 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 отображает наиболее релевантные результаты первыми, подобно поисковым системам.