Поиск и запрос с текстовыми индексами в Azure Cosmos DB для виртуальных ядер MongoDB
Область применения: Виртуальные ядра MongoDB
Одной из ключевых функций, предоставляемых виртуальным ядром Azure Cosmos DB для MongoDB, является индексирование текста, что позволяет эффективно выполнять поиск и запросы текстовых данных. Служба реализует текстовые индексы версии 2 . Версия 2 поддерживает конфиденциальность регистра, но не диакритические чувствительность.
Текстовые индексы в Azure Cosmos DB для MongoDB — это специальные структуры данных, которые оптимизируют текстовые запросы, что делает их более быстрыми и эффективными. Они предназначены для обработки текстового содержимого, например документов, статей, комментариев или других текстовых данных. Текстовые индексы используют такие методы, как маркеризация, стебливание и остановка слов для создания индекса, который повышает производительность поиска на основе текста.
Необходимые компоненты
- Существующий кластер виртуальных ядер Azure Cosmos DB для MongoDB.
- Если у вас нет подписки Azure, создайте учетную запись бесплатно.
- Если у вас есть подписка Azure, создайте новый кластер виртуальных ядер Azure Cosmos DB для MongoDB.
Определение текстового индекса
Для простоты рассмотрим пример приложения блога со следующей настройкой:
- Имя базы данных:
cosmicworks
- Имя коллекции:
products
В этом примере приложения хранятся статьи в виде документов со следующей структурой:
{
"_id": ObjectId("617a34e7a867530bff1b2346"),
"title": "Azure Cosmos DB - A Game Changer",
"content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
"author": "John Doe",
"category": "Technology",
"published": true
}
createIndex
Используйте метод сtext
параметром для создания текстовогоtitle
индекса в поле.use cosmicworks; db.products.createIndex({ title: "text" })
Примечание.
Хотя вы можете определить только один текстовый индекс для каждой коллекции, Azure Cosmos DB для виртуального ядра MongoDB позволяет создавать текстовые индексы в нескольких полях, чтобы обеспечить выполнение поиска текста в разных полях в документах.
При необходимости создайте индекс для поддержки поиска в обоих
title
полях иcontent
в обоих полях.db.products.createIndex({ title: "text", content: "text" })
Настройка параметров текстового индекса
Текстовые индексы в Azure Cosmos DB для MongoDB доступны с несколькими параметрами для настройки их поведения. Например, можно указать язык для анализа текста, задать весовые значения для определения приоритета определенных полей и настроить поиск без учета регистра. Ниже приведен пример создания текстового индекса с параметрами:
Создайте индекс для поддержки поиска как по полям, так
title
иcontent
с поддержкой английского языка. Кроме того, присвойте полю более высокий вес, чтобы определить приоритет в результатахtitle
поиска.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Весовые значения в текстовых индексах
При создании текстового индекса можно назначить разные веса отдельным полям в индексе. Эти весы представляют важность или релевантность каждого поля в поиске. Azure Cosmos DB для виртуального ядра MongoDB вычисляет оценку и назначает вес для каждого документа на основе условий поиска при выполнении текстового запроса поиска. Оценка представляет релевантность документа к поисковому запросу.
Создайте индекс для поддержки поиска в обоих
title
полях иcontent
в обоих полях. Назначьте вес 2 полю "заголовок" и вес 1 полю "содержимое".db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )
Примечание.
Когда клиент выполняет текстовый поисковый запрос с термином Cosmos DB, оценка каждого документа в коллекции будет вычисляться на основе наличия и частоты термина в полях "title" и "content", с более высоким значением поля "заголовок" из-за его более высокого веса.
Выполнение поиска текста с помощью текстового индекса
После создания текстового индекса можно выполнять поиск текста с помощью оператора text в запросах. Оператор текста принимает строку поиска и сопоставляет ее с текстовым индексом, чтобы найти соответствующие документы.
Выполните поиск текста для фразы
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
При необходимости используйте
$meta
оператор проекции вместе сtextScore
полем в запросе, чтобы просмотреть весdb.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Удаление текстового индекса
Чтобы удалить текстовый индекс в MongoDB, можно использовать dropIndex()
метод в коллекции и указать ключ индекса или имя текстового индекса, который требуется удалить.
Удалите текстовый индекс, явно указав ключ.
db.products.dropIndex({ title: "text" })
При необходимости удалите текстовый индекс, указав автоматическое уникальное имя.
db.products.dropIndex("title_text")
Ограничения индексов текста
- В коллекции можно определить только один текстовый индекс.
- Индексы текста поддерживают простой поиск текста и не предоставляют расширенные возможности поиска, такие как поиск регулярных выражений.
- Hint() не поддерживается в сочетании с запросом с помощью выражения $text.
- Операции сортировки не могут использовать упорядочение текстового индекса в MongoDB.
- Текстовые индексы могут быть относительно большими, потребляя значительное место в хранилище по сравнению с другими типами индексов.