别名

预期 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);