索引搜索和模式搜索
在数据库中搜索对象是通过索引实现的。正如索引页面所解释的那样,提供了多种专门类型的索引。
查找操作
哈希索引(包括自动 ID)和唯一 B 树索引允许应用程序通过指定唯一键值来执行快速查找或查找操作。查找操作会直接定位到该对象或返回未找到的状态码。但非唯一索引需要执行搜索操作以创建游标,然后按照下面 API 链接中所述使用该游标遍历搜索结果。
搜索操作
对于 B 树、Patricia树、R 树、KD 树和三元组索引,搜索操作在以下情况中使用:
- 在已知起始值的排序列表中确定起始位置,并可选择按升序或降序获取后续结果。
- 当仅知道起始值的一部分时,在排序列表中确定起始位置,找到最接近的匹配项,并可选择按升序或降序获取后续结果。
- 如上所述确定起始位置,使用
compare()
方法确定范围限制何时达到,然后按升序或降序遍历排序列表,直到达到下限或上限。 - 使用已知起始值确定起始位置,遍历列表以获取每个重复项,使用
compare()
方法确定何时获取到最后一个重复项。
使用索引搜索操作或其中一个游标定位函数(first、last、next、prev 等)定位游标后,可以读取或修改当前对象。
模式搜索
除了上述的搜索功能外,SmartEDB 还支持通配符模式匹配功能。这是指能够搜索与使用通配符指定的模式相匹配的树索引条目,
通配符用于单个字符和多个字符的匹配。默认情况下,问号**“?”将匹配模式中指定位置的任何单个字符,星号“*”将匹配该位置的任何字符组合(包括无字符)。如果需要匹配问号“?””或“*”**本身,则可以通过在模式搜索策略中指定不同的字符来修改这些通配符。
例如,“G*e” 将返回**“Graves”和“Gorine”,而 “Gr?ve*” 将匹配 “Graves”、“Grove”、“Grover”** 等等……在此示例中,**“*”匹配零个、一个或多个字符,而“?”**匹配恰好一个字符。
此外,模式**“G*E*”将匹配所有大写条目,如“GRAVES”、“GORINE”**。然而,由于用于将索引值与搜索键进行匹配的标准比较函数使用的是区分大小写的比较函数,因此搜索模式中指定的大小写将会影响搜索结果。
模式搜索可以通过 SmartEDB运行时从可由 C 或 C++ 应用程序自定义的模式策略中获取的信息来进一步控制。
本地语言搜索API
执行搜索操作的 API 和结构因所使用的编程语言而异。请使用以下链接查看您开发环境的详细说明和示例:
开发语言 | 说明 |
---|---|
C / C++ | C / C++语言中的索引搜索 |
Java | Java 语言中的索引搜索 |
Python | Python 语言中的索引搜索 |
C# | C# 语言中的索引搜索 |