别名
预期 Aliases
用于大多数处理,而不是直接索引名称。
也就是说,将有一个别名,如“customer”,它最初将映射到“customer_v1”索引,并且随着时间的推移,映射、重新索引等可能会发生变化,并且“customer”别名指向“customer_v2”、“customer_v3”等。
Ebean 生成“版本化”(*_v1) 索引映射文件,并且在使用 dropCreate=true
时,它将创建具有版本后缀 (_v1) 的索引,并且还将创建到这些索引的别名。
就像大型 OLTP 数据库一样,重新索引可能相对昂贵并且需要大量时间,并且围绕维护索引和别名存在 devops 组件/工作。Ebean 提供了一些功能来帮助解决这个问题。
按分区索引
在某些情况下,按分区(如天、周、月等)进行索引会很有用。目前不支持此功能。
创建索引
创建索引,可以选择创建别名来映射到索引。
这将从类路径加载关联的映射文件作为资源。
// create a new index without an alias
// ... the mapping is loaded from classpath as a resource
documentStore.createIndex("product_copy", null);
删除索引
删除索引。
documentStore.dropIndex("product_copy");
复制索引
这不会影响数据库,而是使用 ElasticSearch scroll
查询遍历 ElasticSearch 索引,并使用索引源发送到目标索引。
这可以用作 devops 索引迁移任务的一部分。
示例:复制索引 - 全部
// scroll the product index sending the source documents to "product_copy"
long docCount = documentStore.copyIndex(Product.class, "product_copy");
示例:复制索引 - 查询
你可以指定查询过滤器,以便只复制索引的一部分。这可以用来用最近的更改更新索引,或者将单个索引复制任务分区为多个可以在并行执行的任务。
Query<Product> query = server.find(Product.class)
.where()
.ge("whenModified", new Timestamp(since))
.istartsWith("sku", "c")
.query();
int bulkBatchSize = 1000;
long docCount = documentStore.copyIndex(query, "product_copy", bulkBatchSize);
索引全部
这使用数据库作为“源”,并且将执行 findEach
查询以迭代所有行(实际上是 ORM 图)并对其进行索引。
预期这在测试和开发期间更有用。
// query all countries and index them
documentStore.indexAll(Country.class);
按查询索引
这类似于 indexAll,使用数据库作为“源”,并且将执行 findEach
查询以迭代所有行(ORM 图)并对其进行索引。
Query<Product> query = server.find(Product.class)
.where()
.ge("whenModified", new Timestamp(since))
.startsWith("sku", "C")
.query();
server.docStore().indexByQuery(query, 1000);