使用全文搜索¶
您可以使用搜索功能在一个或多个表的指定列中查找字符数据(文本)和 IP 地址,包括 VARIANT、OBJECT 和 ARRAY 列中的字段。此功能根据给定的搜索词列表在指定的列或字符串中搜索文本。如果文本与基于搜索语义的指定搜索词匹配,则函数返回 TRUE。
在大多数情况下,调用 SEARCH 函数的方法是在 SELECT 语句的 SELECT 列表或 WHERE 子句中指定该函数。如果该函数作为 WHERE 子句过滤器使用,当函数返回 TRUE 时,查询将返回行。
SEARCH 功能无需设置,也不需要额外权限。如果您使用的角色具有访问列中数据的权限,您可以通过使用 SEARCH 函数来搜索该数据。
接下来的部分包含有关 SEARCH 函数的更多信息,以及在使用它时优化查询性能的相关内容:
使用 SEARCH 函数¶
SEARCH 函数 在一个或多个表中查找指定列中的字符数据(文本),包括 VARIANT、OBJECT 和 ARRAY 列中的字段。
当您使用 SEARCH 函数时,文本分析器将文本分解为 词元,这些是文本的离散单位,例如单词或数字。如果您不指定分析器,则会应用默认分析器。分析器从搜索词和数据中提取标记。
如果从搜索项中提取的令牌与根据搜索语义从指定列或字段中提取的令牌匹配,则函数返回 TRUE。SEARCH_MODE 函数实参可用于指定以下搜索模式的其中之一:
'OR'– 该函数使用的是析取的语义。如果从被搜索的列或字段中提取的 任何 词元与从搜索字符串中提取的 任何 词元相匹配,则表示存在匹配。例如,如果search_string值为'blue red green',则对于被搜索的任何列或字段中包含blueORredORgreen的行,函数返回 TRUE。'AND'– 该函数使用的是合取的语义。如果从 至少一个 被搜索列或字段中提取的词元与从搜索字符串中提取的 所有 词元相匹配,则会出现匹配。匹配的词元必须都在一列或一个字段中;不能分散在多列或多个字段中。例如,如果search_string值为'blue red green',则对于在至少一个被搜索的列或字段中包含blueANDredANDgreen的行,函数返回 TRUE。'PHRASE'– 该函数使用的是短语匹配语义。如果从 至少一个 被搜索列或字段中提取的词元与从搜索字符串中提取的 所有 词元相匹配(包括词元的顺序和相邻关系),则认为匹配成功。匹配语义与合取语义相同,但以下差异除外:
词元的顺序必须完全匹配。例如,如果
search_string值为'blue,red,green',则对于red,green,blue,函数返回 FALSE。搜索数据中不得插入其他词元。例如,如果
search_string值为'blue,red,green',则对于blue,yellow,red,green,函数返回 FALSE。
'EXACT'– 该函数使用的是完全匹配语义。如果从 至少一个 被搜索列或字段中提取的词元与从搜索字符串(包括分隔符)中提取的 所有 词元相匹配,则认为匹配成功。匹配语义与短语搜索语义相同,但以下差异除外:
词元之间的分隔符字符串必须完全匹配。例如,如果
search_string值为'blue,red,green',则对于在至少一个被搜索的列或字段中包含blue,red,green的行,函数返回 TRUE。对于变体(例如blue|red| green或blue, red, green),函数返回 FALSE。当分隔符是
search_string值中的第一个或最后一个字符时,分隔符会被视为匹配字符。因此,第一个和最后一个分隔符左侧和右侧的分隔符也可能导致匹配。例如,如果search_string值为'[blue]',对于foo [blue] bar、[[blue]]`和 :code:`=[blue].,函数返回 TRUE,但不适用于(blue)或foo blue bar。
以下示例使用默认 SEARCH_MODE ('OR') 和默认分析器在文本 leopard 中搜索字符串 snow leopard:
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
以下示例在文本 lion 中搜索字符串 snow leopard:
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
以下示例在文本 leopard 中搜索字符串 snow leopard,并指定 SEARCH_MODE 参数为 'AND':
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
有关此功能和其他示例的更多信息,请参阅 SEARCH。
使用 SEARCH_IP 函数¶
SEARCH_IP 函数 在一个或多个表中查找指定字符-字符串列中的有效 IPv4 和 IPv6 地址,包括 VARIANT、OBJECT 和 ARRAY 列中的字段。搜索基于您指定的单个 IP 地址。如果此 IP 地址完全匹配指定列或字段中的 IP 地址,函数将返回 TRUE。
以下示例在文本 192.0.2.146 中搜索 IP 地址 10.10.10.1:
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
有关此功能和其他示例的更多信息,请参阅 SEARCH_IP。
优化使用 SEARCH 函数的查询¶
为了提高该使用该函数的查询性能,您可以在表中的特定列或列集上选择性地 启用 FULL_TEXT 搜索优化。当您启用搜索优化时,将建立并维护一个新的 搜索访问路径。