7.4. 索引基础知识

GeoMesa将为给定的 SimpleFeatureType 架构(请参见 索引概述 )。这允许以优化的方式执行各种查询。GeoMesa将尽最大努力确定用于索引的属性。也可以将要使用的属性指定为 SimpleFeatureType -请参见 自定义索引创建 了解更多细节。

7.4.1. 空间索引(Z2/XZ2)

如果 SimpleFeatureType 有一个 Geometry -类型属性 (PointLineStringPolygon 等),则GeoMesa将在该属性上创建空间索引。如果有不止一个 Geometry -type属性,将使用默认属性。默认几何通常使用 * 中的前缀 SimpleFeatureType 字符串,并且是由 SimpleFeatureType.getGeometryDescriptor

7.4.2. 时空索引(Z3/XZ3)

如果 SimpleFeatureType 既有一个 Geometry -type属性和一个 Date 属性,GeoMesa将在这些属性上创建时空索引。这个 Geometry -使用的类型属性与上面的空间索引相同。这个 Date 选定的属性将是第一个声明的属性,也可以显式设置。看见 设置索引日期属性 有关设置索引日期的详细信息,请参阅。

7.4.3. ID索引

GeoMesa将始终在上创建ID索引 SimpleFeature.getID() ,除非明确禁用。

7.4.4. 属性索引

使用默认索引时,某些查询的回答速度很慢。例如,对于Twitter数据,您可能希望返回给定用户的所有tweet。为了加快这种类型的查询,您的简单要素类型中的任何属性都可以单独编制索引。

若要为属性编制索引,请添加一个 index 属性描述符User Data的键,其值为 true

备注

Acumulo数据存储有一个额外的选项来创建简化的‘Join’属性索引,这可以节省空间。看见 属性指数 了解更多细节。

SimpleFeatureType sft = ...
sft.getDescriptor("name").getUserData().put("index", "true");

可以通过多种方式设置用户数据。看见 设置架构选项 了解更多详细信息。

属性索引还支持二级分层索引结构。这可以改进还包含空间和/或时间谓词的属性查询。除非进行不同的配置,否则将使用默认的几何和日期属性来创建辅助Z3或XZ3索引。

备注

辅助索引只能用于针对主属性的相等查询,例如 name = 'bob' 可以利用辅助索引,但是 name ilike 'bo%'name > 'bo' 不能。

可以通过指定要使用的属性来配置不同的二级索引结构,而不是使用缺省值。要自定义辅助索引,必须通过配置索引 自定义索引创建 。如果指定了几何图形和日期属性,则辅助索引将适当地为XZ3的Z3。如果仅指定了几何图形,则辅助索引将为XZ2的Z2(视情况而定)。如果只指定了日期,则辅助索引将是有序的时态索引。

例如,假设一个名为‘geom’的几何属性和一个名为‘dtg’的日期属性,以下所有方法都是在‘name’属性上配置索引的有效方法:

import org.locationtech.geomesa.utils.interop.SimpleFeatureTypes;

String spec = "name:String,dtg:Date,*geom:Point:srid=4326";
SimpleFeatureType sft = SimpleFeatureTypes.createType("mySft", spec);
// enable a default z3 and a default attribute index
sft.getUserData().put("geomesa.indices.enabled", "z3,attr:name");
// or, enable a default z3 and an attribute index with a Z2 secondary index
sft.getUserData().put("geomesa.indices.enabled", "z3,attr:name:geom");
// or, enable a default z3 and an attribute index with a temporal secondary index
sft.getUserData().put("geomesa.indices.enabled", "z3,attr:name:dtg");

要使某些属性优先于其他属性,请参见 基数暗示

警告

可以对列表类型属性进行索引,但查询列表类型索引可能会导致重复的结果。如果重复结果是一个问题,用户应该为列表查询实现他们自己的重复数据消除逻辑。

7.5. 索引版本控制

为了确保交叉兼容性,GeoMesa创建的每个索引都有一个版本号,该版本号标识数据在磁盘上的布局,该版本号在创建时是固定的。更新GeoMesa版本将提供错误修复和新功能,但不会将现有数据更新为新的索引格式。

用于每个架构的索引的确切版本可以从 SimpleFeatureType 用户数据,或简单地检查由GeoMesa创建的索引表的名称。

以下版本可用:

索引版本

GeoMesa版本

备注

1

1.1.0

初步实施

2

1.2.1

支持非点几何图形

对碎片的支持

3

1.2.5

删除了对非点几何图形的支持,转而支持XZ

删除行值中的冗余功能ID以减小磁盘上的大小

支持按属性查看

4

1.3.1

支持表共享

5

2.0.0

使用固定的Z曲线实施

6

2.3.0

可配置的属性

7

3.2.0

修复了每年的纪元索引

这里的版本号可能与使用2.3.0之前的GeoMesa版本创建的模式并不完全对应,因为每个后端实现最初都有自己的版本控制方案。然而,在给定的GeoMesa版本中,每个索引的实现在后端是一致的,所以如果您知道GeoMesa版本,您可以从上表中确定索引格式。请参阅已存档的 GeoMesa 2.2 documentation 以查看后端特定的索引版本号。

请注意,GeoMesa 1.2.2之前的版本包含Geohash索引。该索引已被Z索引取代,不再受支持。