GE为单元格字段值的子字符串查询提供了内置的反向索引支持。GE只索引TSL中标记为[index]属性的单元格字段值。html
只有具备字符串类型的单元格字段才能被索引。有两种状况。1)单元格字段的类型为string。在子字符串查询处理期间,若是其索引字段的值包含查询的子字符串,则匹配单元格。2)单元格字段是字符串的集合,例如,List<string> 或者 List<List<string>>。在 查询处理期间,只要集合中的任何字符串包含查询的子字符串,单元格就会匹配。
spa
索引声明:属性code
要使字段创建索引,增长一个[index]属性:htm
cell MyCell
{
[Index]
string Name;
}
索引
index属性仅对其类型为字符串或字符串集合的字段有效。字符串
能够在嵌套字段上声明索引,例如:get
struct leaf
{
[Index]
string data;
}
cell root
{
leaf substructure;
}
string
因为在GE中没有办法全局的识别这样的结构,所以struct leaf上的index属性单独不会生成有效的索引。只有当这样的机构包含在一个单元格 root, root.leaf.data,造成一个有效的索引。造成一个有效的索引。容许在子结构的子结构中包含索引字段,所以,cell.inner_1.inner_2. ... .leaf.data是可加索引的。
io
若是包含一个或多个索引字段的子结构包含在多个单元格结构中,那么将为每一个单元格生成一个索引,而且索引彼此独立。class
子串查询:
对于索引字段,咱们能够经过调用带有字段标识符和查询字符串方法 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。