返回首页

gbase数据、南大通用产品文档:GBase8s收集有关文件目录和设备的信息

更新日期:2024年09月11日

必须针对每个 DBSPOOL 和 LOGPOOL 池的至少一个文件目录或设备收集其相关信息并
进行配置,然后 ON-Bar 才能使用 GBase 8s 主存储管理器。
在定义目录或设备前,请收集以下信息:

您计划用于备份存储的设备的完整路径名和类型。

您希望在每个设备上落实到 ON-Bar 备份的空间量。
有些磁带设备不返回“设备已满”消息,因此对于这些设备,必须指定大小,以
便 GBase 8s Primary Storage Manager 能够正确使用该设备。对于任何返回“设备
已满”消息的设备,大小是阻止存储管理器使用设备上的所有空间的可选方法。
请参阅您设备的用户指南,以确定该设备在变满时是否返回设备已满代码。

GBase 8s 备份与恢复指南
南大通用数据技术股份有限公司 - 178 -


每个磁带设备的块大小。

排序查询结果
排序试图针对特定查询衡量文档的相关度,从而将众多的匹配文档中相关度最高的文档
排在最前。GBase 8c 提供了两个预置的排序函数。函数考虑了词法,距离,和结构信息;也
就是,他们考虑查询词在文档中出现的频率、紧密程度、以及他们出现的地方在文档中的重
要性。然而,相关性的概念是模糊的,并且是跟应用强相关的。不同的应用程序可能需要额
外的信息来排序,比如,文档的修改时间,内置的排序函数等。也可以开发自己的排序函数
或者采用附加因素组合这些排序函数的结果来满足特定需求。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
638
两个预置的排序函数:
ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization
integer ]) returns float4
基于词素匹配率对vector 进行排序:
ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization
integer ]) returns float4
该函数需要位置信息的输入。因此它不能在“剥离”tsvector 值的情况下运行—它将总是
返回零。
对于这两个函数,可选的weights 参数提供给词加权重的能力,词的权重大小取决于所
加的权值。权重阵列指定在排序时为每类词汇加多大的权重。
{D-weight, C-weight, B-weight, A-weight}
如果没有提供weights,则使用缺省值:{0.1, 0.2, 0.4, 1.0}。
通常的权重是用来标记文档特殊领域的词,
如标题或最初的摘要,
所以相对于文章主体
中的词它们有着更高或更低的重要性。
由于较长的文档有更多的机会包含查询词,因此有必要考虑文档的大小。
例如,包含有
5 个搜索词的一百字文档比包含有5 个搜索词的一千字文档相关性更高。
两个预置的排序函
数都采用了一个整型的标准化选项来定义文档长度是否影响排序及如何影响。
这个整型选项
控制多个行为,所以它是一个屏蔽字:可以使用|指定一个或多个行为(例如,2|4)


0(缺省)表示:跟长度大小没有关系

1 表示:排名(rank)除以(文档长度的对数+1)

2 表示:排名除以文档的长度

4 表示:排名除以两个扩展词间的调和平均距离。只能使用ts_rank_cd 实现

8 表示:排名除以文档中单独词的数量

16 表示:排名除以单独词数量的对数+1

32 表示:排名除以排名本身+1

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
639
当指定多个标志位时,会按照所列的顺序依次进行转换。
需要特别注意的是,排序函数不使用任何全局信息,所以不可能产生一个某些情况
下需要的1%或100%的理想标准值。
标准化选项32
(rank/(rank+1))可用于所有规模的
从零到一之间的排序,当然,这只是一个表面变化;它不会影响搜索结果的排序。
下面是一个例子,仅选择排名前十的匹配:
gbase=#SELECT id, title, ts_rank_cd(to_tsvector(body), query) AS rank FROM
tsearch.pgweb, to_tsquery('america') query
WHERE query @@ to_tsvector(body) ORDER BY rank DESC
LIMIT 10;
id | title | rank
----+---------+------
11 | Brazil | .2
2 | America | .1
| Canada
|
.1
|
Mexico
|
.1
(4 rows)
这是使用标准化排序的相同例子:
gbase=#SELECT id, title, ts_rank_cd(to_tsvector(body), query, 32 /* rank/(rank+1)
*/ ) AS rank FROM tsearch.pgweb, to_tsquery('america') query
WHERE query @@ to_tsvector(body) ORDER BY rank DESC
LIMIT 10;
id | title | rank
----+---------+----------
11 | Brazil
|
.166667
2 | America | .0909091
12 | Canada
| .0909091
13 | Mexico
| .0909091
(4 rows)
下面是使用中文分词法排序查询的例子:
gbase=#CREATE TABLE tsearch.ts_ngram(id int, body text); gbase=#INSERT INTO
tsearch.ts_ngram VALUES(1, ' 中文'); gbase=#INSERT INTO tsearch.ts_ngram
VALUES(2, '中文检索'); gbase=#INSERT INTO tsearch.ts_ngram VALUES(3, '检索中文
');
--精确匹配

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
640
gbase=#SELECT id, body, ts_rank_cd(to_tsvector('ngram',body), query) AS rank
FROM tsearch.ts_ngram, to_tsquery('中文') query WHERE query @@
to_tsvector(body);
id | body | rank
----+------+------
1 | 中文| .1
(1 row)
--模糊匹配
gbase=#SELECT id, body, ts_rank_cd(to_tsvector('ngram',body), query) AS rank
FROM tsearch.ts_ngram, to_tsquery('中文') query WHERE query @@
to_tsvector('ngram',body);
id | body | rank
----+----------+------
3 | 检索中文| .1
1 | 中文
| .1
2 | 中文检索| .1
(3 rows)
排序要遍历每个匹配的tsvector,
因此资源消耗多,
可能会因为I/O 限制导致排序慢。可
是这是很难避免的,因为实际查询中通常会有大量的匹配。

deccvdbl() 函数将 C double 类型数值转换为 decimal 类型数值。
语法
mint deccvdbl(dbl_val, np)
double dbl_val;
dec_t *dec_val;
dbl_val
deccvdbl() 转换为 decimal 类型值的 double 值。
dec_val
指向 deccvdbl() 在其中放置转换结果的 decimal 结构的指针。

结果代码

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 631 -
0
转换成功。
<0
转换失败。

示例

demo 目录中的 deccvdbl.ec 文件包含下列样例程序。
/*
* deccvdbl.ec *
The following program converts two double type numbers to DECIMAL numbers and
displays the results.
*/

#include

EXEC SQL include decimal;

char result[41];


main()
{
mint x;
dec_t num;
double d = 2147483647;

printf("DECCVDBL Sample ESQL Program running.\n\n");

printf("Number 1 (double) = 1234.5678901234\n");
if (x = deccvdbl((double)1234.5678901234, #))
{
printf("Error %d in converting double1 to DECIMAL\n", x);

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 632 -
exit(1);
}
if (x = dectoasc(#, result, sizeof(result), -1))
{
printf("Error %d in converting DECIMAL1 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String Value = %s\n", result);

printf("Number 2 (double) = $.1f\n", d);
if (x = deccvdbl(d, #))
{
printf("Error %d in converting double2 to DECIMAL\n", x);
exit(1);
}
if (x = dectoasc(#, result, sizeof(result), -1))
{
printf("Error %d in converting DECIMAL2 to string\n", x);
exit(1);
}
result[40] = '\0';
printf(" String Value = %s\n", result);

printf("\nDECCVDBL Sample Program over.\n\n");
exit(0);
}
输出
DECCVDBL Sample ESQL Program running.

Number 1 (double) = 1234.5678901234
String Value = 1234.5678901234
Number 2 (double) = 2147483647.0

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 633 -
String Value = 2147483647.0
DECCVDBL Sample Program over.