第二章 使用 SQL Search

SQL Search

本主题介绍 SQL Search工具,这是一种用于执行上下文感知文本搜索操作的工具。要使用SQL Search,必须为包含要搜索的文本的每个列定义 SQL 搜索索引。然后,可以使用标准 SQL 查询以及包含 InterSystems SQL 搜索语法的 WHERE 子句来搜索文本记录。查询将返回包含指定搜索项的所有记录。还可以突出显示返回记录中的匹配文本。

在你开始之前

需要有一个已启动并正在运行的 IRIS 实例,并且具有有效的许可证密钥,可以提供对 IRIS 自然语言处理器 (NLP) 的访问。 (可以从管理门户查看许可证密钥:选择“系统管理”,然后选择“许可”。)

本文档中的示例使用 Aviation.Event SQL 表中的数据。如果希望使用此示例数据,可以 https://github.com/intersystems/Samples-Aviation 中获取。 (不需要了解有关 GitHub 的任何信息或拥有 GitHub 帐户。)找到 README.md 文件的内容,该文件显示在 GitHub 存储库中包含的文件名和目录下方。滚动到 README.md 文件底部的“安装说明”部分并完成这些步骤。

SQL 搜索的索引源

可以使用 SQL Search 来搜索 %String 数据类型或 %Stream.GlobalCharacter(字符流)数据类型中的文本。

要执行 SQL Search,要搜索的列必须具有已定义的 SQL 搜索位图索引。 SQL 搜索索引有四个级别。这些级别在嵌套子类中定义。每个索引级别都提供前一级别的所有功能,以及特定于该级别的其他 SQL 搜索功能。可以创建以下任何 SQL 搜索索引类型:

  • 最小索引(%iFind.Index.Minimal):支持使用通配符、模糊搜索和正则表达式进行 SQL 单词和短语搜索。它不支持共现或位置短语搜索或搜索结果的突出显示。
  • 基本索引(%iFind.Index.Basic):支持使用通配符的 SQL 单词和词组搜索。它支持共现和位置短语搜索以及搜索结果的突出显示。
  • 语义索引(%iFind.Index.Semantic ):支持 NLP 实体的 SQL 搜索,并可选择支持否定属性。
  • 分析索引(%iFind.Index.Analytic):支持语义索引的所有 NLP 功能,以及路径、邻近度和优势信息。

每个索引级别都支持前一级别的所有参数,并添加一个或多个附加参数。未指定的参数采用默认值。

以下类定义示例创建一个表,该表在 Narrative 属性(列)上具有语义索引。索引属性可以是数据类型 %String%Stream.GlobalCharacter

   Class Aviation.TestSQLSrch Extends %Persistent [
      DdlAllowed,Owner={UnknownUser},SqlRowIdPrivate,
      SqlTableName=TestSQLSrch ]
  { 
  Property UniqueNum As %Integer;
  Property CrashDate As %TimeStamp [ SqlColumnNumber=2 ];
  Property Narrative As %String(MAXLEN=100000) [ SqlColumnNumber=3 ];
  Index NarrSemanticIdx On (Narrative) As %iFind.Index.Semantic(INDEXOPTION=0,
     LANGUAGE="en",LOWER=1);
  Index UniqueNumIdx On UniqueNum [ Type=index,Unique ];
  }

任何类型的 SQL 搜索索引都支持以下参数:

  • IGNOREPUNCTUATION 指定是否忽略标点符号。对于 %iFind.Index.Minimal,默认值为 1:忽略标点符号。对于所有其他 SQL 搜索索引类型,默认值为 0:标点符号影响搜索结果;文本中的前导标点符号和尾随标点符号必须与搜索字符串中的相同标点符号匹配。
  • INDEXOPTION 指定是否建立索引以允许词干或分解。由于支持这些操作的索引会显着增加索引的大小,因此建议指定 INDEXOPTION=0,除非很可能会使用词干提取或分解。默认值为 0
  • LANGUAGE 指定索引记录时使用的语言。例如,“en”指定英语。使用“*”启用自动语言识别。默认为“en”
  • LOWER 指定查询搜索是否区分大小写。默认情况下, SQL 搜索索引不区分大小写; SQL 搜索在对其建立索引之前将文本标准化为小写。 LOWER 参数确定是否执行小写标准化(LOWER=1,默认值,标准化为小写)。由于语言约定通常在句子开头或在标题中使用单词时将其大写,因此在大多数应用中优选标准化为小写。如果指定 LOWER=0,则查询 search_items 字符串区分大小写。例如,如果指定 LOWER=0,则查询 search_items 字符串“turkey”将仅匹配 turkey,而不匹配 Turkey。如果指定 LOWER=1,则查询 search_items 字符串“turkey”将匹配 turkey 和 Turkey。
  • USERDICTIONARY 允许指定在索引之前应用于文本的用户定义的 UserDictionary 的名称。此参数是可选的,仅供高级使用。

语义索引(%iFind.Index.Semantic)还支持以下可选参数:

  • IFINDATTRIBUTES 允许指定是否识别文本中的否定并存储否定属性。 IFINDATTRIBUTES=1 标识并索引否定。默认值为 IFINDATTRIBUTES=0
01-19 14:02