与任何 SQL
索引一样,定义的 SQL
搜索索引(默认情况下)是在填充新表时构建的,并在随后插入、更新或删除数据时维护的。使用 %NOINDEX
填充表时,可以推迟索引的构建,然后使用 %Build()
方法构建索引。可以向已填充数据的表添加索引,然后构建该索引。
以下示例从 Aviation.Events
表填充 Aviation.TestSQLSrch
表。任何定义的 SQL
搜索索引都会自动构建。此示例插入了大量文本,因此运行可能需要一分钟左右的时间:
INSERT OR UPDATE INTO Aviation.TestSQLSrch (UniqueNum,CrashDate,Narrative)
SELECT %ID,EventDate,NarrativeFull FROM Aviation.Event
此示例将 INSERT OR UPDATE
与使用唯一键定义的字段一起使用,以防止重复执行创建重复记录。
SQL
搜索可以在 SQL
查询 WHERE
子句中使用 SQL
搜索语法来对一个或多个文本项执行文本搜索。这些文本项可以是单词或单词序列(基本索引)或 NLP
语义实体(语义索引)。多个文本项是隐式 AND
搜索;所有指定的项目必须以任何顺序出现在文本中。 SQL
搜索的语法如下:
WHERE %ID %FIND search_index(indexname,'search_items',search_option,'language','synonym_tables')
indexname
是为特定列定义的 SQL
搜索索引的名称。search_items
是要搜索的文本项(单词或 NLP
实体)列表,用引号引起来。文本项由空格分隔。项目由字母数字字符串和可选的通配符语法字符组成。默认情况下,文本项不区分大小写(请参阅 LOWER
参数)。可用的 search_items
语法如下所述。search_option
是指定要执行的搜索类型的索引选项整数。可用值包括 0
(语法搜索)、1
(带词干的语法搜索)、2
(带分解和词干的语法搜索)、3
(带模糊搜索的语法搜索)和 4
(带正则表达式的语法搜索)。如果 search_option=4
,则假定 search_items
包含单个正则表达式字符串。有关更多详细信息,请参阅正则表达式。请注意,出于性能原因,SQL
搜索不支持一些更深奥的正则表达式语法形式; $LOCATE ObjectScript
函数支持这些语法形式。language
是要应用的 NLP
支持的语言模型,指定为两个字符的字符串。例如,“en”
指定英语。如果指定“*”
,查询将执行自动语言识别。synonym_tables
是一个包含同义词表名称的字符串,或者是逗号分隔的同义词表列表。执行基本索引搜索时,SQL
搜索通过是否存在一个或多个空格字符来识别单词。句子标点符号(句号、逗号、分号或冒号后跟空格)将被忽略。 SQL
搜索将所有其他标点符号视为文字。例如,SQL
搜索将“touch-and-go
”视为单个单词。数字中的连字符或小数点等标点符号被视为文字。必须指定引号字符和撇号。可以通过将其加倍来指定单引号字符。
默认情况下,文本被标准化为小写字母(不区分大小写)。还执行其他特定于语言的规范化,例如规范化仅字符宽度不同的日语字符。
可以使用语义索引执行任何基本索引搜索(单词、共现或位置短语)。尝试使用基本索引执行语义索引搜索会导致 SQLCODE -149
错误。