Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 查询数据 » 全文搜索的类型

 

前缀搜索

全文搜索功能允许搜索某一术语的开头部分。这称为前缀搜索。要执行前缀搜索,应指定要搜索的前缀,后跟一个星号。这称为前缀术语

CONTAINS 子句的关键字不能用于前缀搜索,除非它们位于短语之中。有关 CONTAINS 关键字的列表,请参见CONTAINS 搜索条件

也可以在查询字符串中指定多个前缀术语,并将其包括在短语中(例如 ['"shi* fab"']。)

有关前缀搜索的完整语法限制,请参见对于星号 (*) 允许的语法

以下示例在 MarketingInformation 表中查询以前缀 shi 开头的项目:

SELECT ID, ct.score, Description
   FROM MarketingInformation CONTAINS ( MarketingInformation.Description, 'shi*' ) AS ct
   ORDER BY ct.score DESC;
ID score Description
906 2.295363835537917 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Visor</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>Lightweight 100% organically grown cotton construction. Shields against sun and precipitation. Metallic ions in the fibers inhibit bacterial growth, and help neutralize odor.</span></p></body></html>
901 1.6883275743936228 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Tee Shirt</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>We've improved the design of this perennial favorite. A sleek and technical shirt built for the trail, track, or sidewalk. UPF rating of 50+.</span></p></body></html>
903 1.6336529491832605 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Tee Shirt</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>A sporty, casual shirt made of recycled water bottles. It will serve you equally well on trails or around town. The fabric has a wicking finish to pull perspiration away from your skin.</span></p></body></html>
902 1.6181703448678983 <html><head><meta http-equiv=Content-Type content="text/html; charset=windows-1252"><title>Tee Shirt</title></head><body lang=EN-US><p><span style='font-size:10.0pt;font-family:Arial'>This simple, sleek, and lightweight technical shirt is designed for high-intensity workouts in hot and humid weather. The recycled polyester fabric is gentle on the earth and soft against your skin.</span></p></body></html>

ID 906 的分数最高,因为术语 shield 在文本索引中的出现频率低于 shirt。

对 GENERIC 文本索引执行前缀搜索

对于 GENERIC 文本索引,前缀搜索的行为如下所示:

  • 如果前缀术语的长度大于 MAXIMUM TERM LENGTH,则将其从查询字符串中删除,因为文本索引中不能存在长度超过 MAXIMUM TERM LENGTH 的术语。因此,对于 MAXIMUM TERM LENGTH 为 3 的文本索引,搜索 ['red appl*'] 相当于搜索 ['red']。

  • 如果前缀术语的长度小于 MINIMUM TERM LENGTH,并且该术语不是短语搜索的一部分,则前缀搜索将正常进行。因此,对于 MINIMUM TERM LENGTH 为 5 的 GENERIC 文本索引,搜索 ['macintosh a*'] 将返回包含 macintosh 以及任何以 a 开头且长度大于等于 5 的术语的索引行。

  • 如果前缀术语的长度小于 MINIMUM TERM LENGTH,但术语是短语搜索的一部分,则前缀术语将从查询中删除。因此,对于 MINIMUM TERM LENGTH 为 5 的 GENERIC 文本索引,搜索 ['"macintosh appl* turnover"'] 相当于搜索其后为任何后跟 turnover 的术语的 macintosh。不会查找包含 ["macintosh turnover"] 的行;macintosh 和 turnover 之间必须存在术语。

对 NGRAM 文本索引执行前缀搜索

对于 NGRAM 文本索引,前缀搜索可能返回意外的结果,因为 NGRAM 文本索引仅包含 n 元语法词,而不包含任何有关术语开头的信息。查询术语也将分解为 n 元语法词,然后使用 n 元语法词而不是查询术语执行搜索。因此,应注意以下行为:

  • 如果前缀术语的长度小于 n 元语法词的长度 (MAXIMUM TERM LENGTH),则查询将返回所有包含以该前缀术语开头的 n 元语法词的索引行。例如,对于 3 元语法词文本索引,搜索 ['ea*'] 将返回所有包含以 ea 开头的 n 元语法词的索引行。因此,如果对术语 weather 和 fear 建立索引,则行将被视为匹配,因为它们各自的 n 元语法词分别包含 eat 和 ear。

  • 如果前缀术语的长度大于 n 元语法词长度,并且不是短语的一部分,也不是邻近搜索中的参数,则前缀术语将转换为 n 元语法词短语,并将星号删除。例如,对于 3 元语法词文本索引,搜索 ['purple blac*'] 相当于搜索 ['"pur urp rpl ple" AND "bla lac"']。

  • 如果是短语,那么还会发生以下行为:

    • 如果前缀术语是短语中的唯一术语,则将其转换为 n 元语法词短语,并删除星号。例如,对于 3 元语法词文本索引,搜索 ['"purpl*"'] 相当于搜索 ['"pur urp rpl"']。

    • 如果前缀术语在短语中处于最后位置,则删除星号并将术语转换为 n 元语法词短语。例如,对于 3 元语法词文本索引,搜索 ['"purple blac*"'] 相当于搜索 ['"pur urp rpl ple bla lac"']。

    • 如果前缀术语不在短语的最后位置,则短语分解为由 AND 连接的多个短语。例如,对于 3 元语法词文本索引,搜索 ['"purp* blac*"'] 相当于搜索 ['"pur urp" AND "bla lac"']。

  • 如果前缀术语是邻近搜索中的参数,则邻近搜索转换为 AND。例如,对于 3 元语法词文本索引,搜索 ['red NEAR[1] appl*'] 相当于搜索 ['red AND "app ppl"']。

另请参见