搜索特殊字符
OmniFind 支持建立索引和搜索特殊字符。
对特殊字符进行转义
特殊字符可以在查询语法中提供不同的功能。 例如,问号 (?) 可用作通配符。 要搜索在查询语法中具有特殊功能的特殊字符,必须通过在该特殊字符之前添加反斜杠来对其进行转义,例如:
- 要搜索字符串 "where?" , 按如下所示转义问号: "where \?"
- 要搜索字符串 "c: \temp" ,请按如下所示对冒号和反斜杠进行转义: "c \:\\temp"
不转义此类特殊字符可能会导致语法错误。
| 特殊字符 | 未转义时的行为说明 |
|---|---|
| & 符号 | |
| 星号 (*) | 用作通配符。 |
| @ 符号(@) | 当 at 符号是查询的第一个字符时,将生成语法错误。 在 xmlxp 表达式中, at 符号用于引用属性。 |
| 方括号 [] | 在 xmlxp 表达式中用于搜索元素和属性的内容 |
| 花括号 { } | 生成语法错误。 |
| 反斜杠 (\) | |
| 插入标记 (^) | 用于加权 (增强) 术语。 |
| 冒号 (:) | 用于在字段内容中进行搜索。 |
| 等号(=) | 生成语法错误。 |
| 惊叹号(!) | 当惊叹号是查询的第一个字符时,将返回语法错误。 |
| 正斜杠 (/) | 在 xmlxp 表达式中,正斜杠用作元素路径分隔符。 |
| 大于符号 (>) 小于符号 (<) | 在 xmlxp 表达式中用于比较属性的值。 否则,这些字符将生成语法错误。 |
| 减号(-) | 当减号是术语的第一个字符时,将仅返回不包含该术语的文档。 |
| 括号 () | 用于分组。 |
| 百分号 (%) | 指定搜索项是可选的。 |
| 加号(+) | |
| 问号(?) | 作为通配符处理。 |
| 分号(;) | |
| 单引号 (') | 单引号用于包含 xmlxp 表达式。 |
| 蒂尔达 (~) | 作为近似值和模糊搜索运算符处理 |
| 垂直线 (|) |
对查询语法中未提供特殊功能的特殊字符进行转义是可选的。 下表显示了一些不需要转义的特殊字符的示例。
| 特殊字符 | 未转义时的行为说明 |
|---|---|
| 逗号 (,) | |
| 美元符号 ($) | |
| 句点(.) | 在 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 文档中搜索以下特殊字符:? * \