[toc]
第七章 使用 SQL Search - 同义词表
同义词表
要实现同义词表,请将该表定义为扩展 iFind.Synonym
抽象类的持久类。
此类定义了两个属性:FromTerm
和 ToTerm
。一对 FromTerm
和 ToTerm
属性将 ToTerm
定义为 FromTerm
的同义词。如果查询包含 FromTerm
,SQL
搜索将使用 ToTerm
来扩展查询。
该查询使用此类的 GetMatch()
方法根据查询词在同义词表中搜索同义词。
在查询执行期间,SQL
搜索会检查单个单词单元或位置搜索短语是否存在任何同义词。例如,在同义词表中定义了两个同义词对(“persons”、“people”)
和(“walk”、“run”)
。对短语“persons walk”
执行 SQL
搜索查询。如果同义词表与查询关联,则 SQL
搜索不仅返回与原始查询匹配的文档,还返回与以下任一查询匹配的文档:“people run”、“people walk”
和“people run”
。
但是,如果 search_items
字符串为 '"persons walk"'
,则不会发生查询扩展,因为 SQL
搜索不会扩展位置短语搜索中的任何单词。位置短语本身是查询扩展的最小单位。但是,如果定义一个同义词对,如 (“persons walk”
、“persons walk and run”
),SQL
搜索会将查询“persons walk”
扩展为“persons walk and run”
。如果 ToTerm
包含多个单词,SQL
搜索会将其视为位置短语。 ToTerm
可以是任何有效的位置短语;它可以包含 *
或 ?
通配符。
注意:同义词表不能与正则表达式搜索 (search_option=4
) 一起使用。
高亮
可以使用 search_items
语法突出显示返回文本中的单词。突出显示语法为:
(text,search_items,search_option)
search_items
:突出显示使用与搜索相同的 search_items
语法。这允许对返回的记录使用相同的 search_items
值并突出显示这些记录中导致它们返回的字符串。这还允许使用 TestSearchString()
方法来验证突出显示的 search_items
语法。但是,由于突出显示应用于每个匹配项的每个实例,因此突出显示会忽略 search_items
字符串中的 search_items
语法 AND
、OR
和 NOT
逻辑运算符。
search_option
:可选的 search_option
可以是 0
(默认值)或 4
(正则表达式)。
可以使用以下任一方法应用突出显示:
- 选择突出显示的项目:
SELECT %iFind.Highlight(Narrative,'"visibility [1-4] mile*" AND "temp* ? degrees"')
FROM Aviation.TestSQLSrch
WHERE %ID %FIND search_index(NarrBasicIdx,'"visibility [1-4] mile*" AND "temp* ? degrees"',0,'en')
- 实用方法突出显示:
可以使用 %iFind.Utils.Highlight()
方法来执行 SQL
搜索并对结果应用突出显示。
默认情况下,突出显示会在字符串中的适当位置插入 <b> and </b> (bold) XML
标记。默认情况下,突出显示不区分大小写。
突出显示可与任何 search_option
一起使用,包括正则表达式搜索 (search_option=4)
,如以下示例所示:
SET x="Time flies like an arrow. other stuff. Fruit flies like a banana."
WRITE ##class(%iFind.Utils).Highlight(x,"\p{LU}(\p{L}|\s)+",4)
与单词搜索一起使用时,此方法会单独突出显示每个指定单词的每次出现。
当与位置短语搜索一起使用时,此方法会突出显示位置短语的每次出现。
网友评论