Полнотекстовый индекс — это специализированный индекс, который хранит информацию об отдельных словах (токенах) и их расположении в текстовых полях. После создания полнотекстовый индекс позволяет быстро и эффективно искать определенные слова, фразы или выражения в текстовых ресурсах больших объемов.
Цель и преимущества полнотекстовых индексов
Основная цель полнотекстовых индексов — расширение возможностей быстрого и точного поиска и извлечения текстовых данных. Вот некоторые основные преимущества:
- Эффективный текстовый поиск — полнотекстовые индексы могут обеспечить более быстрый поиск в текстовых полях по сравнению с обычными атрибутивными индексами. Это связано с тем, что они оптимизированы для операций текстового поиска, что снижает необходимость сканирования всей таблицы.
- Возможности сложных запросов — полнотекстовые индексы поддерживают сложные запросы, такие как поиск фраз, поиск по близости и ранжирование результатов по релевантности.
- Улучшенная производительность — индексируя текстовые данные, полнотекстовые индексы могут значительно повысить производительность поисковых операций. Это особенно важно для больших наборов данных, в которых текстовый поиск может быть ресурсоемким.
- Поддержка нескольких полей — в SQL Server один полнотекстовый индекс может входить несколько полей из таблицы, что позволяет выполнять комплексный текстовый поиск по разным столбцам.
Чтобы пояснить преимущества использования полнотекстовых индексов, рассмотрим следующий пример:
Страница содержания показывает, где находится каждая глава. Если вы хотите найти главу 7, то вы можете проверить страницу содержания, перейти на эту страницу и найти то, что вам нужно. Если вы пытаетесь вспомнить важную цитату, в которой есть слово «человечество», но не знаете, в какой главе она находится, страница содержания вам не поможет. Если в книге нет полнотекстового индекса, вам придется пролистать все страницы, чтобы найти цитату. Полнотекстовый индекс содержит список всех слов в книге вместе с номерами страниц. Это позволяет быстро искать такие слова, как человечество, и даже находить фразы, например, «один гигантский шаг для человечества».
Рассмотрите возможность использования полнотекстовых индексов, если вам необходимо выполнить сложный текстовый поиск в текстовом поле. В частности, полнотекстовые индексы особенно полезны для следующего:
- Поиск по одному слову — поиск отдельных слов в текстовом поле, например, ураган или Флорида.
- Поиск фразы — поиск фразы, представляющей собой группу слов. Чтобы выполнить поиск по фразе, заключите группу слов в кавычки, например, «пути эвакуации».
Следующий сценарий является примером, иллюстрирующим полезность полнотекстовых индексов.
Газоснабжающая компания отслеживает отчеты о проверках и документы по безопасности своей трубопроводной сети. Применение полнотекстового индекса к текстовым полям базы геоданных, содержащей отчеты о проверках, описания безопасности и журналы поддержки, позволяет выполнять полнотекстовый поиск для поддержки запросов по фразам для таких терминов, как утечка газа или коррозия трубопровода, повышая скорость и точность проверок безопасности и планирования технического обслуживания.
Подробнее о создании инженерной сети и конфигурации газовой сети.
Полнотекстовые индексы предназначены для расширения возможностей текстового поиска в базах данных. В отличие от атрибутивных индексов, которые фокусируются на определенных столбцах, и пространственных индексов, которые обрабатывают географические данные, полнотекстовые индексы оптимизируют поиск в текстовых полях, индексируя каждое слово. Это обеспечивает эффективный поиск, выполнение сложных запросов, таких как поиск по фразам, и повышает производительность при извлечении релевантных текстовых данных.
Сравнительную таблицу атрибутивных, полнотекстовых и пространственных индексов см. в разделе Индексы в базе геоданных.
Как работают полнотекстовые индексы
Полнотекстовые индексы — это мощный инструмент, помогающий быстро выполнять поиск в больших объемах текстовых данных. После создания полнотекстового индекса для поля, можно использовать текстовый поиск для быстрого и эффективного поиска в больших объемах текста по определенным словам, фразам или выражениям.
Текстовый поиск доступен в различных частях ArcGIS, включая следующие:
- ArcGIS Portal Directory REST API — для запроса данных через веб-сервисы.
- ArcObjects — для программного доступа и обработки данных ГИС.
- Панель Найти местоположение – в ArcGIS Pro используйте панель Найти местоположение, чтобы применить режим полнотекстового поиска Полный текст начинается с или Полный текст равен к полю, по которому вы хотите выполнить поиск.

Внимание:
ArcGIS Pro предоставляет возможность создания очень простого полнотекстового индекса. Управление и настройка полнотекстового индекса должны выполняться вручную на уровне СУБД с использованием инструментов СУБД.
Следующий сценарий на высоком и упрощенном уровне моделирует процесс создания, хранения и использования полнотекстового индекса для быстрого и точного поиска и извлечения текстовых данных.
Таблица GIS.Storm_Damage_Assessment содержит несколько полей атрибутов, подробно описывающих тип, серьезность и описание повреждений, о которых сообщили домовладельцы после недавних штормов. Дополнительные поля, невидимые в этой таблице, включают адрес и контактную информацию владельцев недвижимости.

Как страховой агент этих владельцев недвижимости, настройка полнотекстового индекса для поля Damage _Description позволит вам быстро находить ключевые термины, такие как Водосточные желоба, Черепица, Окно, Крыша или Протечки, чтобы вы могли порекомендовать владельцу здания наиболее подходящего подрядчика, к которому следует обратиться, исходя из конкретных повреждений и необходимых ремонтных работ.
- Создайте полнотекстовый индекс с помощью инструмента Добавить полнотекстовый индекс. В этом примере указаны имя таблицы, GIS.Storm_Damage_Assessment и поле, содержащие текстовые данные для индексации, Damage_Description.

Заполнение индекса включает в себя разбиение текста в указанном поле на отдельные ключевые термины (токены), организацию, отслеживание и последующее сопоставление точного местоположения каждого слова с текстовым полем для быстрого доступа.
Практический пример:
На следующей иллюстрации смоделировано на высоком и упрощенном уровне, как полнотекстовый индекс разбивается на отдельные ключевые термины и как их местоположения сопоставляются с текстовым полем.В этом примере в таблице GIS.Storm_Damage_Assessment первое значение атрибута в строке 1 в поле Damage_Description имеет вид Отсутствующая или поднятая черепица. В качестве моделирования того, как будет заполняться этот полнотекстовый индекс, этот текст будет разбит на следующие ключевые термины, организованные в алфавитном порядке, и будет записано точное место, где каждый термин появляется в указанном текстовом поле Damage_Description.
- Отсутствующая — встречается 4 раза в строках 1, 4, 8, 9
- Поднятая — встречается дважды в строках 1 и 9
- Черепица — встречается 6 раз в рядах 1, 3, 4, 5, 8, 9

Индекс служит глоссарием для всех ключевых терминов в индексируемом поле, организуя и отслеживая точное место, где каждое слово появляется, вплоть до исходного индекса. Этот процесс будет продолжаться до тех пор, пока весь текст в указанном текстовом поле не будет разбит на ключевые термины, организован и не будет зафиксировано место, где встречается каждый термин.
После завершения создания полнотекстового индекса поля Damage_Description, вы можете использовать панель Найти местоположение, чтобы применить режим полнотекстового поиска Полный текст равен к полю Damage_Description.

В этом примере с панели Найти местоположение можно выполнять поиск по слову Черепица.
Без применения полнотекстового индекса поиск привел бы к более длительному полному сканированию таблицы. Однако, поскольку для поля Damage_Description был создан полнотекстовый индекс, на панели Найти местоположение можно сделать запрос к этому поле одного слова Черепица. Панель Найти местоположение использует полнотекстовый поиск для быстрого определения термина Черепица и находит все строки, в которых встречается этот ключевой термин, аналогично следующему.

Результаты вашего поиска позволят вам быстро найти любые записи о повреждениях, связанных с кровельной черепицей, чтобы владелец здания мог связаться с наиболее подходящим подрядчиком, основываясь на конкретных сообщениях о повреждениях.
Управление полнотекстовым индексом в ArcGIS
Способ создания ArcGIS Pro пространственных индексов зависит от типа базы геоданных, а для многопользовательских баз геоданных может различаться в зависимости от используемой системы управления базами данных. В двух следующих разделах описаны различия в функциональных возможностях.
Примечание:
При использовании полнотекстовых индексов следует учитывать следующее:
- Полнотекстовые индексы не поддерживаются в файловых базах геоданных или в многопользовательской базе геоданных в Db2.
- Один или несколько индексов — некоторые РСУБД могут поддерживать только один полнотекстовый индекс на таблицу, в то время как другие могут допускать несколько.
- Поддержка — полнотекстовые индексы должны поддерживаться базовым источником данных. Они обновляются с учетом изменений в данных, которые могут повлиять на эффективность поиска.
Полнотекстовые индексы в мобильных базах геоданных
Полнотекстовые индексы поддерживаются в мобильных базах геоданных. Мобильные базы геоданных хранятся в базе данных SQLite, и эта база данных изначально содержит расширение FTS5. Расширение SQLite FTS5 (полнотекстовый поиск) используется для полнотекстовой индексации в мобильных базах геоданных и создает виртуальные таблицы и дополнительные побочные таблицы для управления полнотекстовыми индексами. Это означает, что мобильные базы геоданных также изначально имеют расширение FTS5.
Полнотекстовые индексы в многопользовательских базах геоданных
ArcGIS Pro поддерживает полнотекстовые индексы для таблиц или классов объектов в базе геоданных на каждой из следующих поддерживаемых платформ систем управления базами данных, каждая из которых имеет определенные конфигурации:
- Oracle
- Поддерживает полнотекстовые индексы для текстовых полей не-Unicode.
- Для индексации требуется преобразование полей Unicode в не-Unicode.
Подсказка:
Используйте инструмент Перенести текстовое поле для переноса существующих допустимых типов текстовых полей Unicode в не-Unicode. Входной набор данных должен быть из многопользовательской базы геоданных в Oracle, а подходящие типы текстовых полей Unicode, которые можно преобразовать в тип текстового поля не-Unicode, включают следующее:
- NVARCHAR2 будет преобразован в VARCHAR2.
- NCHAR будет преобразован в VARCHAR2.
- NCLOB будет преобразован в CLOB.
- PostgreSQL
- Поддерживает создание одного полнотекстового индекса на поле.
- SQL Server
- Возможность полнотекстового поиска является дополнительным компонентом Database Engine SQL Server и должна быть включена перед выполнением следующих требований. Если функция полнотекстового поиска еще не включена на вашем экземпляре SQL Server, вам придется заново запустить процесс настройки SQL Server.
Полнотекстовый каталог SQL Server — это виртуальный контейнер для одного или нескольких полнотекстовых индексов. Используйте SQL Server для создания как минимум одного полнотекстового каталога в каждой базе данных SQL Server, где будут созданы полнотекстовые индексы.
В каждой базе данных может быть несколько полнотекстовых каталогов, но полнотекстовый индекс должен принадлежать одному и только одному полнотекстовому каталогу. Вы можете указать полнотекстовый каталог по умолчанию, который будет использоваться, если другой не указан.
- Каждый пользователь, создающий полнотекстовые индексы, должен иметь разрешение REFERENCES, предоставленное для полнотекстового каталога, к которому будет принадлежать индекс.
- SQL Server поддерживает создание одного полнотекстового индекса для каждой таблицы, который может включать несколько полей.
- SAP HANA
- Подобно PostgreSQL, поддерживает один полнотекстовый индекс на поле.
Добавить полнотекстовый индекс
Чтобы использовать инструмент Добавить полнотекстовый индекс для добавления полнотекстового индекса к указанным текстовым полям для поддержки поиска по отдельному столбцу или по нескольким столбцам в мобильной или многопользовательской базе данных, выполните следующие действия:
Примечание:
Инструмент Добавить полнотекстовый индекс не поддерживается в файловых базах геоданных или в многопользовательской базе геоданных в Db2.
- Откройте инструмент геообработки Добавить полнотекстовый индекс, перейдя на вкладку Анализ и щелкнув Инструменты в группе Геообработка. Кроме того, вы можете найти инструмент в наборе инструментов Инструменты управления данными на панели инструментов Индексы.

Диалоговое окно инструмента геообработки Добавить полнотекстовый индекс отображается с настройками по умолчанию.

- Для Входной таблицы в ниспадающем меню выберите один набор данных или используйте кнопку обзора
, чтобы выбрать класс объектов или таблицу, к которой нужно добавить полнотекстовый индекс.Примечание:
Более подробно об управлении полнотекстовым индексом в ArcGIS.
- В поле Поля для индексирования выберите одно или несколько полей, к которым будет применен полнотекстовый индекс.

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

Примечание:
Для SQL Server, SQLite и мобильных баз геоданных параметр Имя полнотекстового индекса будет игнорироваться.
- Имя полнотекстового каталога — выберите имя полнотекстового каталога SQL Server, которое вы хотите использовать для параметра Имя полнотекстового каталога. Опция Имя Полнотекстового каталога применима только для SQL Server.

Примечание:
Если Имя полнотекстового каталога не указано, инструмент попытается использовать полнотекстовый каталог по умолчанию, определенный для базы данных, если он доступен. В противном случае выберите полнотекстовый каталог из ниспадающего списка. Этот ниспадающий список содержит все полнотекстовые каталоги, к которым подключенный пользователь имеет доступ.
- Имя полнотекстового индекса — укажите имя индекса, который будет создан. Параметр Имя полнотекстового индекса отображается по умолчанию.
- Нажмите Запуск, чтобы добавить полнотекстовый индекс к полю.
Примечание:
Вы также можете выбрать Запланировать запуск, чтобы запустить инструмент в более позднее время с возможностью повторения, используя ниспадающее меню рядом с кнопкой Запустить.

Дополнительные сведения о запуске инструментов геообработки по расписанию
После завершения работы инструмента Добавить полнотекстовый индекс в диалоговом окне свойств таблицы или класса объектов, на вкладке Индексы появится Имя полнотекстового индекса.
Когда обновлять полнотекстовый индекс
Полнотекстовые индексы поддерживаются РСУБД и должны периодически обновляться для отражения изменений в данных, гарантируя, что поисковые запросы будут возвращать точные результаты. Частота обновлений полнотекстового индекса будет зависеть от объема изменений, вносимых в данные, а также от конфигурации вашей базы данных. Управление, обновление и перестроение полнотекстовых индексов в многопользовательской базе геоданных будет осуществляться вручную на уровне СУБД с использованием инструментов СУБД.
Для мобильных баз геоданных расширение SQLite FTS5 (полнотекстовый поиск) позволяет выполнять эффективный полнотекстовый поиск путем создания виртуальной таблицы, которая автоматически обновляется при изменении базовых данных, устраняя необходимость в ручной перестройке индекса.