MongoDB - текстовые индексы

Опубликовано: 30 Ноября, 2021

MongoDB - это база данных NoSQL на основе документов. Поскольку данные хранятся в формате документа, они могут содержать огромное количество данных, а поскольку это база данных типа NoSQL, нет строгой необходимости в отношениях ссылочной целостности. Таким образом, поиск здесь является важным критерием, и для этого MongoDB предоставляет текстовые индексы для поддержки запросов текстового поиска, особенно по строковому содержимому. Текстовые индексы должны быть либо строкой, либо массивом строковых элементов.

Как создать текстовые индексы?

В MongoDB мы можем создавать текстовые индексы, используя метод db.collectionName.createIndex (). Итак, чтобы проиндексировать поле, которое содержит строку или массив строковых элементов, передайте документ в методе createIndex (), который содержит поле и строковый литерал (то есть «текст»). Используя этот метод, вы можете индексировать несколько полей для текстового индекса. Кроме того, составной индекс может содержать ключ текстового индекса в сочетании с ключом индекса по возрастанию и убыванию. А если вы хотите удалить текстовый индекс, просто используйте имя индекса.

Синтаксис:

db.collectionName.createIndex( { field: “text” } )

Пример:

Database: ggf

Collection: studentsposts

Documents: Two documents

Теперь давайте создадим текстовый указатель в поле «title» коллекции «studentposts» для поиска внутри коллекции.

 db.studentsposts.createIndex ({название: "текст"})

Теперь посмотрим, как искать с помощью текстового индекса:

 db.studentsposts.find ({$ text: {$ search: "mongodb"}}). pretty ()

Вывод выше не требует пояснений, поскольку мы создали индекс для поля «title» и попытались выполнить поиск по тексту «mongodb». Он присутствует в обоих документах в поле «заголовок». Следовательно, результат здесь - 2 документа.

Индекс падения

Иногда может возникнуть необходимость удалить и текстовые индексы, так как они были созданы неправильно, или их нужно изменить другим способом, или их нужно полностью удалить. Итак, с помощью метода db.collection.dropIndex () мы можем удалить текстовый индекс. Этот метод удаляет указанный индекс из данной коллекции.

Синтаксис:

 db.collection.dropIndex ("TextIndex")

Пример:

Сначала находим индекс поля.

 db.studentsposts.getIndexes ()

Теперь отбрасываем текстовый индекс с помощью метода dropIndex ().

 db.studentsposts.dropIndex ("title_text")

Укажите вес

Для текстового индекса вес проиндексированного поля - это значение поля. В MongoDB для каждого поля индекса в документе MongoDB суммирует результаты, умножая количество совпадений на вес. Теперь, используя эту сумму, MongoDB вычисляет оценку для документа. Вес поля индекса по умолчанию равен 1, и вы можете настроить вес индекса с помощью метода createIndex ().

Пример:

 db.studentsposts.createIndex ({title: "текст", теги: "текст"}, 
                             {веса: {title: 10, теги: 5}, 
                              name: "TextIndex"})

Здесь вес поля заголовка и тегов равен 10 и 5.

Индекс подстановочного знака

Используя спецификатор подстановочного знака ($ **), вы можете создавать несколько полей текстовых индексов. Благодаря текстовому индексу с подстановочными знаками MongoDB индексирует каждое поле, содержащее строковые данные, во всех документах, присутствующих в данной коллекции. Текстовый индекс с подстановочными знаками полезен для неструктурированных данных, когда мы не знаем, какое поле содержит строковые данные, или для специального запроса. Это позволяло искать текст во всех полях, содержащих строковые данные. Индекс подстановочного текста может быть частью составного индекса.

Пример:

 db.studentsposts.createIndex ({"$ **": "текст"})

Здесь мы создаем текстовые индексы, используя спецификатор подстановочного знака.

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

Ограничения

  • Для каждой коллекции допускается не более одного текстового индекса.
  • С выражением запроса $ text мы не можем использовать hint ()
  • Вместе текстовый индекс и сортировка не могут дать требуемых результатов. Операции сортировки не могут использовать порядок в текстовом индексе.
  • Составной индекс не может включать поля с несколькими ключами или геопространственными индексами.