搜索特殊字符

OmniFind 支持建立索引和搜索特殊字符。

您可以像搜索其他查询词汇一样搜索特殊字符。 要在文档中查找特殊字符,请在查询表达式中包含该特殊字符。 在某些情况下,需要对特殊字符进行转义。

对特殊字符进行转义

特殊字符可以在查询语法中提供不同的功能。 例如,问号 (?) 可用作通配符。 要搜索在查询语法中具有特殊功能的特殊字符,必须通过在该特殊字符之前添加反斜杠来对其进行转义,例如:

  • 要搜索字符串 "where?" , 按如下所示转义问号: "where \?"
  • 要搜索字符串 "c: \temp" ,请按如下所示对冒号和反斜杠进行转义: "c \:\\temp"

不转义此类特殊字符可能会导致语法错误。

表 1. 必须进行转义才能搜索的特殊字符
特殊字符 未转义时的行为说明
& 符号  
星号 (*) 用作通配符。
@ 符号(@) 当 at 符号是查询的第一个字符时,将生成语法错误。 在 xmlxp 表达式中, at 符号用于引用属性。
方括号 [] 在 xmlxp 表达式中用于搜索元素和属性的内容
花括号 { } 生成语法错误。
反斜杠 (\)  
插入标记 (^) 用于加权 (增强) 术语。
冒号 (:) 用于在字段内容中进行搜索。
等号(=) 生成语法错误。
惊叹号(!) 当惊叹号是查询的第一个字符时,将返回语法错误。
正斜杠 (/) 在 xmlxp 表达式中,正斜杠用作元素路径分隔符。
大于符号 (>) 小于符号 (<) 在 xmlxp 表达式中用于比较属性的值。 否则,这些字符将生成语法错误。
减号(-) 当减号是术语的第一个字符时,将仅返回不包含该术语的文档。
括号 () 用于分组。
百分号 (%) 指定搜索项是可选的。
加号(+)  
问号(?) 作为通配符处理。
分号(;)  
单引号 (') 单引号用于包含 xmlxp 表达式。
蒂尔达 (~) 作为近似值和模糊搜索运算符处理
垂直线 (|)  

对查询语法中未提供特殊功能的特殊字符进行转义是可选的。 下表显示了一些不需要转义的特殊字符的示例。

表 2。 不需要转义的特殊字符的示例
特殊字符 未转义时的行为说明
逗号 (,)  
美元符号 ($)  
句点(.) 在 xmlxp 表达式中,句点用于搜索元素的内容。
井号 (#)  
下划线(_)  

查询词汇旁边的特殊字符

当特殊字符与查询中的单词相邻时,将返回包含相同顺序的特殊字符和单词的文档。 例如,搜索 "30 $" 会查找包含 "30 $" 的文档,但不会查找包含 "30 $" 的文档。 但是,搜索 "30 $" (带有空格) 会发现文件中任何位置包含 "30 $" 和 "$" 的所有文档,包括 "30 $" 和 "$30"。

当特殊字符与查询中的停用词相邻时,不会从查询中除去停用词。 例如,搜索 "at&t "不会删除停止词 "at"。 但是,在搜索 "at & t "时,空格去掉了停止词 "at"。

当特殊字符分隔两个单词时,会将记号序列作为序列进行搜索。 例如,搜索 "jack_jones" 会查找包含 "jack_jones" 但不包含 "jack_and_jones" 的文档。

与特殊字符相邻的单词将进行词元化。 例如,用英语搜索 "cats&dogs",可以找到包含 "cat&dog "的文档。

可以在通配符搜索表达式中使用特殊字符。 例如,搜索 "ja * _" 会查找包含 "jack_jones" 的文档。 但是,不能使用通配符来查找特殊字符。 例如,搜索 "ca*s" 会查找包含 "cats" , "categories" 或 "cas" 但不包含 "ca_s" 的文档。

对特殊字符建立索引

在记号化和语言处理期间, OmniFind 服务器将特殊字符标识为标点并建立索引。 特殊字符是令牌定界符。

例如,将 "jack_jones" 记号化为三个单独的记号: "jack" , "_" 和 "jones"。 电子邮件, URL 和文件路径细分为标记,例如:

  • Jack_jones@ibm.com 已记号化为 jack _ jones @ ibm。 com
  • http://www.ibm.com 已记号化为 http :// www。 ibm。 com

特殊字符不会在文件中占据标记位置。 例如, "jack_jones" 使用与 "jack" 相同的标记位置中的下划线建立索引。 包含空格时,特殊字符也不会占用标记位置。 例如, "jack_jones" 的索引方式与 "jack _ jones" 的索引方式相同。

标记位置用于精确短语搜索和近似值搜索。 例如,如果文档包含表达式 jack_jones ,那么搜索精确短语 "" jack jones " 将找到此文档。

单独对特殊字符序列建立索引时,不会按特定顺序对其进行搜索。 例如,搜索 "# $" 还会查找包含 "$#" 的文档。

CJK 语言中的特殊字符

要查找包含特殊字符的字符序列,查询表达式必须包含特殊字符。 如果从查询表达式中省略特殊字符,那么可能找不到字符序列。 在非 CJK 语言中,始终会找到字符序列,即使查询表达式省略了特殊字符也是如此。 例如,如果已建立索引的文档包含 john_smith ,那么您可以搜索 john_smith 或 "john smith" (完全匹配,没有下划线) ,并且这两个查询都返回包含 john_smith 的文档。

限制: 无法在 CJK 文档中搜索以下特殊字符:? * \