反向索引

GE为单元格字段值的子字符串查询提供了内置的反向索引支持。GE只索引TSL中标记为[index]属性的单元格字段值。

只有具有字符串类型的单元格字段才能被索引。有两种情况。1)单元格字段的类型为string。在子字符串查询处理期间,如果其索引字段的值包含查询的子字符串,则匹配单元格。2)单元格字段是字符串的集合,例如,List<string> 或者 List<List<string>>。在 查询处理期间,只要集合中的任何字符串包含查询的子字符串,单元格就会匹配。

索引声明:属性

要使字段建立索引,增加一个[index]属性:

cell MyCell
{
    [Index]
    string Name;
}

index属性仅对其类型为字符串或字符串集合的字段有效。

可以在嵌套字段上声明索引,例如:

struct leaf
{
    [Index]
    string data;
}

cell root
{
    leaf substructure;
}

由于在GE中没有办法全局的识别这样的结构,因此struct leaf上的index属性单独不会生成有效的索引。只有当这样的机构包含在一个单元格 root, root.leaf.data,形成一个有效的索引。形成一个有效的索引。允许在子结构的子结构中包含索引字段,因此,cell.inner_1.inner_2. ... .leaf.data是可加索引的。

如果包含一个或多个索引字段的子结构包含在多个单元格结构中,那么将为每个单元格生成一个索引,并且索引彼此独立。

子串查询:

对于索引字段,我们可以通过调用带有字段标识符和查询字符串方法 Index.SubstringQuery。一个字段标识符,例如:Index.root.leaf.data,是否在索引类中定义了自动生成的嵌套类。它用于指定我们要查询的单元格字段:Index.root.leaf.data 标识了根单元中的叶子结构中的数据字段。Index.SubstringQuery(Index.root.leaf.data, "query string")返回单元格id列表。每个root.leaf.data字段值包含“query string”的数据字段值。

Index.SubstringQuery 方法同样接受一系列字符串查询,给定一个查询字符串序列q1, q2, ..., qn,这个方法将根据*q1*q2*...*qn*执行通配符搜索,它表示所有的字符串q1, q2, ..., qn是按照序列中指定的顺序匹配字符串的子字符串。

索引更新:

如果单元格不断更新,对索引字段的更新可能不会立即反映在索引中。也就是说,子字符串查询可能有假负数-单元格当前是匹配的,但尚未包含在索引中。为了排除假正数(以前匹配的单元格现在不匹配),我们需要在获得匹配的单元格id后再次检查单元格字段值。

系统定期更新索引。要手动更新索引,可以在特定字段标识符上调用Index.UpdateSubstringIndex

LINQ 集成

反向索引子系统与LINQ集成。爱选择器上的LINQ查询中,GE转换字符串的调用。在索引字段中包含反向索引查询。同样的规则适用于IEnumerable<string>.Contains.

更多的细节请查看LINQ

 

转载于:https://www.cnblogs.com/v-haoz/p/9668119.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值