地理数据库中的全文索引

全文索引是一种特殊的索引,它存储了文本字段中各个单词(令牌)及其具体位置的信息。 创建全文索引后,便可以对海量文本内容进行快速而高效的搜索,查找特定的词语、短语或表达方式。

全文索引的目的和优势

全文索引的主要目的是提升快速且准确地搜索和检索文本数据的能力。 以下是一些主要优势:

  • 高效的文本搜索 - 与常规属性索引相比,全文索引通常能实现更快的文本字段搜索速度。 这是因为全文索引针对文本搜索操作进行了优化,从而减少了扫描整个表格的需求
  • 复杂的查询能力 - 全文索引支持复杂的查询,例如短语搜索、邻近搜索以及按相关性对搜索结果进行排序
  • 改进的性能 - 通过对文本数据进行索引,全文索引可以显著提升搜索操作的性能。 对于文本搜索可能非常消耗资源的大型数据集而言,这一点尤为重要。
  • 支持多个字段 - 在 SQL Server 中,一个全文索引可以包含来自同一个表的多个字段,从而能够跨不同的列进行全面的文本搜索。

为了更好地解释使用全文索引的益处,请考虑以下类比示例:

书籍的目录显示了每个章节所在的位置。 如果您想查找第 7 章,可以查看目录,找到对应的页码并找到所需内容。 如果您试图回忆一句包含“mankind”单词的重要引言,但不知道它在哪一章,目录就无法提供帮助。 除非这本书有全文索引,否则您需要翻阅整本书才能找到这句引用。 全文索引列出了书中每个单词及其出现的页码。 这样,您能够快速搜索像 mankind 这样的词语并找到像 "one giant leap for mankind" 这样的短语。

当需要在文本字段中执行复杂的文本搜索时,请考虑使用全文索引。 更具体地说,全文索引尤其适用于以下情况:

  • 单词搜索 - 在文本字段中搜索单个词语,例如 hurricaneFlorida
  • 短语搜索 - 搜索一个短语,即由多个词语组成的一组词。 要使用短语进行搜索,请将该组词语用双引号括起来,例如 "evacuation routes"

以下场景举例说明了全文索引的实用性。

一家天燃气公用事业公司对其管网的检查报告和安全文件进行跟踪管理。 通过对包含检查报告、安全说明和维护日志的地理数据库的文本字段应用全文索引,可以支持对 gas leakpipeline corrosion 等术语的短语进行全文搜索,从而提高安全检查和维护计划的速度和准确性。

天燃气公用事业管道网络

了解关于公用事业网络创建公用事业网络燃气配置的详细信息。

全文索引旨在增强数据库中的文本搜索能力。 与侧重于特定列的属性索引和处理地理数据的空间索引不同,全文索引通过索引每个单词来优化文本字段内的搜索。 这样可以实现高效搜索、复杂的查询(如短语搜索)以及改进的相关文本数据检索性能。

有关属性索引、全文索引和空间索引的表格对比,请参阅地理数据库中的索引部分。

全文索引的工作原理

全文索引是一种强大的工具,能够帮助用户快速搜索大量基于文本的数据。 在字段上创建全文索引后,便可以对海量文本内容进行快速而高效的文本搜索,查找特定的词语、短语或表达方式。

ArcGIS 的多个部件都提供了文本搜索功能,包括:

  • ArcGIS Portal Directory REST API - 用于通过 Web 服务查询数据。
  • ArcObjects - 用于以编程方式访问和操作 GIS 数据。
  • 定位窗格 - 在 ArcGIS Pro 中,使用定位窗格将全文搜索模式、全文开头为全文等于应用到要搜索的字段。
    在“定位”窗格中配置“定位”视图时的全文搜索模式选项

了解有关全文搜索模式的详细信息以及如何使用“定位”窗格定位已配置的要素或记录

警告:

ArcGIS Pro 提供了创建基本全文索引的功能。 对全文索引的管理和自定义选项必须使用 DBMS 工具在 DBMS 级别手动完成。

以下场景以高级且简化的方式模拟了全文索引是如何创建、存储和使用,从而实现快速准确地搜索和检索文本数据的过程。

GIS.Storm_Damage_Assessment 表包含多个属性字段,详细记录了建筑物所有者在近期风暴后报告的房屋损坏类型、严重程度和描述。 此表中未显示的额外字段包括所有者的地址和联系方式。

应用全文索引前的 GIS.Storm_Damage_Assessment 表

作为这些建筑物所有者的保险代理人,,通过在 Damage _Description 字段上设置全文索引,您能够快速搜索 GuttersShinglesWindowRoofLeaks 等关键词,从而根据具体损坏情况和所需的维修工作,为建筑物所有者推荐最合适的承包商。

  1. 使用添加全文索引工具创建全文索引。 在此示例中,已指定了表名 GIS.Storm_Damage_Assessment 和包含要索引的文本数据的字段 Damage_Description
    在 Damage_Description 字段上添加全文索引。
  2. 填充索引的过程包括将指定字段中的文本分解为单独的关键词(令牌),然后对这些词条进行组织、追踪,并记录每个词条在原始文本字段中的确切位置,以便快速访问。

    案例研究:
    下面的插图以高级且简化的方式模拟全文索引是如何分解为单独的关键词,以及它们的位置是如何映射回文本字段的。

    在本示例中,来自 GIS.Storm_Damage_Assessment 表的 Damage_Description 字段第一行中的第一个属性值为 Missing or Lifted Shingles。 作为此全文索引如何填充的模拟,此文本将被分解为以下关键词,并按字母顺序组织,同时记录每个关键词在指定 Damage_Description 文本字段中出现的精确位置。

    • Missing - 出现 4 次,分别在第 1、4、8 和 9 行
    • Lifted - 出现 2 次,分别在第 1 和 9 行
    • Shingles - 出现 6 次,分别在第 1、3、4、5、8 和 9 行
    全文索引
    该索引相当于已索引字段中所有关键词的词汇表,用于组织和追踪每个单词在原始索引中出现的精确位置。

    此过程将持续进行,直到指定文本字段中的所有文本都被分解为关键词、组织起来,并记录下每个关键词出现的位置。

  3. 完成在 Damage_Description 字段上创建全文索引后,即可使用定位窗格将全文索引模式全文等于应用到 Damage_Description 字段。

    从“定位”窗格中,将“全文等于”设置为包含全文索引的字段的搜索模式

  4. 对于此示例,您可以从定位窗格搜索单词 Shingles

    如果没有应用全文索引,搜索将需要执行耗时更长的全表扫描。 但是,由于已在 Damage_Description 字段上创建了全文索引,因此您可以从“定位”窗格中查询该字段以查找单个单词 Shingles定位窗格使用全文搜索快速识别术语 Shingles,并定位该关键术语在索引字段中出现的所有行,类似于以下内容。

    全文索引字段的查询结果

    搜索结果将允许您快速识别涉及屋顶木瓦的任何损坏报告,以便建筑物业主可以根据报告的具体损坏联系最合适的承包商。

ArcGIS 中的全文索引管理

ArcGIS Pro 创建全文索引的方式取决于地理数据库的类型,对于企业级地理数据库,创建方式还会因所使用的数据库管理系统而异。 接下来的两节将解释这些功能差异。

注:

如果您正在使用全文索引,请考虑以下事项:

  • Db2 中的文件地理数据库或企业级地理数据库不支持全文索引。
  • 单个索引与多个索引 - 在某些 RDBMS 中,每张表可能只支持一个全文索引,而其他系统则可能允许多个。
  • 维护 - 全文索引需要由基础数据源进行维护。 它们会进行更新以反映数据的变化,这可能会影响搜索性能。

移动地理数据库中的全文索引

移动地理数据库支持全文索引。 移动地理数据库存储在 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
    • 全文搜索功能是 SQL Server 数据库引擎的一个可选组件,在满足以下要求之前必须先启用它。 如果您的 SQL Server 实例尚未启用全文功能,您需要重新运行 SQL Server 的安装程序。
    • SQL Server 全文目录是一个用于容纳一个或多个全文索引的虚拟容器。 使用 SQL Server 在每个将创建全文索引的 SQL Server 数据库中至少创建一个全文目录。

      每个数据库可以有多个全文目录,但一个全文索引必须仅属于一个全文目录。 您可以指定一个默认全文目录,如果在创建全文索引时没有指定其他目录,则将使用该默认目录。

    • 每个需要创建全文索引的用户都必须对该索引将要归属的全文目录拥有 REFERENCES 权限。
    • SQL Server 支持为每个表创建一个全文索引,该索引可以包含多个字段。
  • SAP HANA
    • PostgreSQL 类似,其支持为每个字段创建一个全文索引。

添加全文索引

要使用添加全文索引工具向移动或企业级地理数据库中指定的文本字段添加全文索引,从而支持按单个列或多个列进行搜索,请按照以下步骤操作:

注:

添加全文索引工具在 Db2 中的文件地理数据库或企业级地理数据库中不受支持。

  1. 打开添加全文索引地理处理工具,方法是导航至分析选项卡,然后在地理处理组中单击工具。 或者,您可以在数据管理工具工具集的索引工具箱中搜索该工具。
    “分析”选项卡,“工具”和“地理处理”下的“添加全文索引”工具

    添加全文索引地理处理工具对话框将以默认设置显示。

    “添加全文索引”地理处理工具对话框

  2. 输入表下拉菜单中,选择单个数据集,或者使用浏览按钮 浏览 选择要添加全文索引的要素类或表。
    注:

    了解有关 ArcGIS 中的全文索引管理的详细信息。

  3. 对于要索引的字段,选择将要应用全文索引的单个字段或多个字段。
    “要索引的字段”参数
    注:

    某些数据库仅支持为全文索引的创建选择单个字段。 对创建多字段全文索引的支持因数据库而异。

  4. (可选)此参数的名称将根据输入表的数据源而变化。
    • 全文索引名称 - 为将要创建的索引提供一个名称。 全文索引名称参数默认显示。
      全文索引名称
      注:

      对于 SQL ServerSQLite 和移动地理数据库,全文索引名称参数将被忽略。

    • 全文目录名称 - 对于 SQL Server 全文目录名称,选择您希望使用的全文目录名称参数。 全文目录名称选项仅适用于 SQL Server
      全文目录名称
      注:

      如果未提供全文目录名称,该工具将尝试使用为数据库定义的默认全文目录(如果可以访问)。 否则,请从下拉列表中选择一个全文目录。 此下拉列表包含连接的用户有权访问的所有全文目录。

  5. 单击运行,向字段添加全文索引。

    注:

    您还可以选择计划运行,以便稍后运行该工具,并可使用运行按钮旁边的下拉菜单设置可选的重复运行计划。

    计划运行

    了解有关计划地理处理工具的详细信息

添加全文索引工具完成后,在表或要素类的属性对话框中的索引选项卡下将显示全文索引名称

何时更新全文索引

全文索引由 RDBMS 维护,应定期更新以反映数据的变化,确保搜索结果的准确性。 全文索引的更新频率取决于对数据进行的编辑量以及您的数据库配置。 企业级地理数据库中全文索引的管理、更新和重建需要在 DBMS 级别使用 DBMS 工具手动完成。

对于移动地理数据库,SQLite FTS5(全文搜索)扩展模块通过创建在基础数据发生变化时自动更新的虚拟表来实现高效的全文搜索,从而无需手动重建索引。

相关主题