搜索自变量

搜索自变量语法

阅读语法图跳过直观语法图>>-+----------------------+--+-------------------------+-------->
   '-RESULT LIMIT--number-'  '-EXPANSION LIMIT--number-'

>--+------------------------------------------+----------------->
   '-STOP SEARCH AFTER--number--+-DOCUMENT--+-'
                                '-DOCUMENTS-'

>--+-| boolean-search-expression |-+---------------------------><
   '-| freetext-argument |---------'

Boolean-search-expression:

|--+-| search-term |-------------------------------------------------+--|
   '-| boolean-search-expression |--| operator-or |--| search-term |-'

search-term:

|--+-| search-factor |-----------------------------------------------+--|
   +-| search-term |--| operator-and |--| search-factor |------------+
   +-| search-term |--| operator-accum |--| search-factor |----------+
   '-| search-term |--| operator-minus |--| positive-search-factor |-'

Search-factor:

|--+-----+--| positive-search-factor |--------------------------|
   '-NOT-'

Positive-search-factor:

|--+-+------------------------------------------------------------+--| search-primary |-+--|
   | |                  .-,----------------------------------.    |                     |
   | |                  V                                    |    |                     |
   | '-+-SECTION--+--(----"section-name"--+----------------+-+--)-'                     |
   |   '-SECTIONS-'                       '-WEIGHT--number-'                            |
   '-attribute-factor-------------------------------------------------------------------'

Search-primary:

|--+-| text-literal |-------------------+-----------------------|
   +-| context-condition |--------------+
   +-| thesaurus-invocation |-----------+
   +-(--| boolean-seach-expression |--)-+
   '-(--| text-literal-list |--)--------'

Operator-and:

|--&------------------------------------------------------------|

Operator-or:

|--|------------------------------------------------------------|

Operator-accum:

|--ACCUM--------------------------------------------------------|

Operator-minus:

|--MINUS--------------------------------------------------------|

Context-condition:

|----| context-argument |--| IN-SAME |--| context-unit |--| AS |--| context-argument |---->

>--+-------------------------------+----------------------------|
   | .---------------------------. |
   | V                           | |
   '---AND--| Context-argument |-+-'

Context-argument:

|--+-| text-literal |------------+------------------------------|
   +-(--| text-literal-list |--)-+
   '-| thesaurus-invocation |----'

Text-literal-list:

   .-,------------.
   V              |
|----text-literal-+---------------------------------------------|

Context-unit:

|--+-PARAGRAPH-+------------------------------------------------|
   '-SENTENCE--'

Text-literal:

|--+--------------------------------+--+----------------+------->
   +-PRECISE-FORM-OF----------------+  '-WEIGHT--number-'
   +-STEMMED-FORM-OF----------------+
   '-FUZZY-FORM-OF--+-------------+-'
                    '-match-level-'

>--"word-or-phrase"--+----------------------------+-------------|
                     '-ESCAPE--"escape-character"-'

thesaurus-invocation:

|--THESAURUS--"thesaurus-name"--EXPAND-------------------------->

>--+-+-SYNONYM------------+--TERM OF--| text-literal |-------------------+--|
   | +-RELATED------------+                                              |
   | '-RELATION--(number)-'                                              |
   '-+-BROADER--+--TERM OF--| text-literal |--+------------------------+-'
     '-NARROWER-'                             '-FOR--count--+-LEVEL--+-'
                                                            '-LEVELS-'

Attribute-factor:

|--ATTRIBUTE--"attribute-name"---------------------------------->

>--+-BETWEEN--valueFrom AND valueTo-+---------------------------|
   +->--valueFROM-------------------+
   '-<--valueTO---------------------'

freetext-argument:

|--IS-ABOUT--+----------+--"word-or-phrase"--------------------->
             '-language-'

>--+----------------------------+-------------------------------|
   '-ESCAPE--"escape-character"-'

示例

指定 SQL 搜索自变量中提供了示例。

搜索参数

RESULT LIMIT number
一个关键字,它指定要由全文本搜索返回的最大结果数。

RESULT LIMIT 应当与 SCORE 函数一起使用来确保返回的结果已计算了分数,并且只处理最佳结果。

EXPANSION LIMIT number
一个关键字,它指定可以为了进行搜索而扩展一个词条的最大次数。例如,确定可以扩展搜索词条“a*”的次数。
STOP SEARCH AFTER number DOCUMENTS(S)
用来指定搜索阈值的一个关键字。如果在搜索期间达到了文档数,则搜索将停止,并返回中间结果。较小的值可提高搜索性能,但是可能会导致获得较少的结果,并且会省略可能具有高级别的文档。

注意,此关键字没有缺省值,并且 number 值必须是正整数。

boolean-search-expression
可以根据语法图并使用布尔运算符 NOT、AND、OR、ACCUM 和 MINUS 来组合搜索词条和搜索因子。这些运算符具有以下优先权顺序(第一个的优先权最高):NOT> MINUS = ACCUM = AND > OR。可以在以下示例中了解到这种情况:
"Pilot" MINUS "1passenger" &"vehicle" | "transport" & "public"
它将按以下顺序进行求值:
(("Pilot" MINUS "passenger") & ("vehicle")) | ("transport" & "public")
如果其中一个布尔自变量求值为 true(可与 OR 运算符进行比较),则 ACCUM 运算符求值为 true。等级值是通过累计两个操作数中的等级值来计算的。ACCUM 运算符与 AND 具有相同的绑定(优先权)。如果左操作数求值为 true,则 MINUS 运算符求值为 true。如果右边的操作数求值为 true,则采用左边的操作数的等级值并减去损失来计算等级值。
search-primary
如果在(文档的指定部分)找到扩展的任何文本文字,则由同义字调用组成的 search-primary 运算符求值为 true。如果在(文档的指定部分)中找到任何文本文字,则由文本文字列表组成的 search-primary 求值为 true。
SECTION(S) section-name

一个关键字,它指定要将搜索范围限制在结构化文档中的一个或多个部分。必须在创建索引时在指定的模型文件中指定这些部分的名称,请参阅CREATE INDEX

这些部分的名称是区分大小写的。确保模型文件和查询中的部分名是完全相同的。

此模型描述包含可标识部分的文档的结构,因此可以单独搜索这些部分的内容。不能使用屏蔽字符来屏蔽部分名。如果在某个部分找到 search primary,则使用 SECTION 子句的 positive-search-factor 求值为 true。

context-argument IN SAME context-unit AS context-argument AND context-argument ...
此条件允许您在同一段或同一个句子中搜索文本文字的组合。上下文自变量始终等价于文本文字列表,并且可以使用同义字扩展来将文本文字扩展为这样一个列表。

如果文档中具有上下文单元(与段有关的句子),文档中的每个扩展的上下文自变量至少包含其中一个文本文字,则此条件求值为 true。可以在以下示例中了解到这种情况:

("a","b") IN SAME PARAGRAPH AS ("c","d") 
          AND THESAURUS "t1" EXPAND SYNONYM TERM OF "e".

假设 e1 和 e2 是 e 的同义词,以下段将匹配:

".. a c e .." ,  ".. a c e1..",  "a c e2..",
".. a d e .." ,  ".. a d e1..",  "a d e2..",
".. b c e .." ,  ".. b c e1..",  "b c e2..",
".. b d e .." ,  ".. b d e1..",  "b d e2..".
PRECISE FORM OF
一个关键字,使用该关键字时将完全按照输入的内容来搜索 PRECISE FORM OF 后面的单词(或者一个短语中的每个单词)。这种搜索是区分大小写的;即,使用的是大写字母还是小写字母非常重要。例如,如果搜索 mouse,则找不到“Mouse”。
STEMMED FORM OF
一个关键字,使用该关键字时会在执行搜索之前将 STEMMED FORM OF 后面的单词(或者一个短语中的每个单词)缩短为词干。这种搜索不区分大小写。例如,如果搜索 mouse,则可以找到“Mouse”。

采用哪种方式将单词缩短其词干形式是与语言有关的。目前,只支持英语,而且单词还必须遵循常规词尾变化。

FUZZY FORM OF
用于进行“模糊”搜索的一个关键字,“模糊”搜索就是搜索与搜索词条具有相似拼写的那些词条。当在由“光学字符识别”(OCR)程序创建的文档中进行搜索时,模糊搜索特别有用。这样的文档通常包括拼写错误的单词。例如,单词 economy 可能会被 OCR 程序识别为 econony。注意,前三个字符必须匹配,如果搜索源中的单词包含屏蔽字符,则不能使用模糊搜索。
match level
1 到 100 之间的一个整数,它指定相似程度,其中 100 比 1 更相似。100 指定“精确匹配”,60 被认为是一个非常“模糊值”。匹配级别越模糊,花费的搜索时间就越长,这是因为要搜索更多文档。缺省匹配级别为 70。
WEIGHT number
将文本文字与权值关联来更改缺省分数。允许的权值是 0(最低的分数权值)到 1000(最高的分数权值)之间的整数,缺省值为 100。
word-or-phrase
要搜索的单词或短语。在单词中可以使用的字符与语言有关。是否需要用分隔符将单词隔开,也是与语言有关的。对于英语和其它大多数语言,短语中的每个单词都必须用空格字符隔开。

要搜索包含双引号的字符串,应输入双引号两次。例如,要搜索文本 "wildcard" character,使用:

"""wildcard"" character"

注意,在该示例中,只能搜索一组引号。不能够搜索一个序列中的两个引号。每个单词或短语的最大长度只能为 128 个字节。

Masking characters
一个单词可以包含下列屏蔽字符:
_(下划线)
表示任何单个字符。
%(百分号)
表示任何数目的任意字符。如果一个单词只由一个 % 组成,则它表示一个任意长度的可选单词。除了使用单个 % 来表示可选单词之外,一个单词不能只由屏蔽字符组成。如果使用了屏蔽字符,则不能使用“同义字”。屏蔽字符不能跟在非字母数字字符后面。
ESCAPE escape-character
一个字符,它将下一个字符标识为要搜索的字符,而不是要用作屏蔽字符。例如,如果转义字符是 $,则 $%、$_ 和 $$ 分别表示 %、_ 和 $。前面没有 $ 的任何 % 和 _ 字符都表示屏蔽字符。

在搜索期间,只允许您使用单字节字符。不允许使用双字节字符。

THESAURUS thesaurus-name
一个关键字,用来指定要用来扩展文本文字的同义字的名称。同义字名称是已经使用同义字编译器进行编译的同义字的文件名(不带扩展名)。它必须位于 <os-dependent>/sqllib/db2ext/thes 中。或者,可以在文件名前面指定路径。
EXPAND relation
指定使用哪种关系来扩展使用同义字的文本文字。同义字已经预定义了 DB2EXTTH 命令中描述的关系。使用下列关键字来表示这些关系:
  • SYNONYM,表示等价的对称关系。
  • RELATED,表示关联的对称关系。
  • BROADER,可以后跟指定的深度级别的直接分层关系。
  • NARROWER,可以后跟指定的深度级别的直接分层关系。
对于用户定义的关系,使用 RELATION(number),它对应于 DB2TEXTTH 中的关系定义。
TERM OF text-literal

要将其它搜索词条从同义字添加至的文本文字。

count LEVELS

一个关键字,用来指定同义字中词条的层数(深度),这些同义字将用来扩展给定关系的搜索词条。如果不指定此关键字,则假定 COUNT 为 1。深度的值必须是一个正整数值。

ATTRIBUTE Attribute-name
搜索具有与指定条件相匹配的属性的文档。属性名是指 CREATE INDEX 命令中的属性表达式的名称,或者是文档模型文件中的属性定义。

属性因子仅用于类型为 double 的属性。保证该值的精度为 15 位。16 个字符和 16 个字符以上的数字会被四舍五入。在 attribute-name、valueFrom 和 valueTo 中不允许使用屏蔽字符。有关解释,请参阅下列内容:

BETWEEN valueFrom AND valueTo
如果属性的值大于(不等于)valueFrom 并且小于(不等于)valueTo,则 BETWEEN 属性因子求值为 true。
>valueFrom
如果属性的值大于(不等于)valueFrom,则“>”属性因子求值为 true。
<valueTo
如果属性的值小于(不等于)valueTo,则“<”属性因子求值为 true。
如果 CREATE INDEX 命令中的属性名是使用引号来指定的,或者是在模型文件中定义的,则指定的属性名必须精确匹配。但是,如果 CREATE INDEX 命令中没有指定引号,则属性名必须采用大写。
IS ABOUT language word-or-phrase
一个允许您指定自由文本搜索自变量的选项。应当使用它来获取不同种类的分数算法,原因是它会检查文档中的词条的定位。单词或短语中使用的词条互相越接近,文档中就包括更多词条,返回的分数值就越高。

附录E. 受支持的语言 中描述了允许的语言值,它只与泰国语有关。如果未指定,则将 en_US 语言用作缺省语言。语言只用于单词或短语的标记。

注意,仅当请求了分数值,并且搜索结果按分数值排序时,IS ABOUT 才有用。