エイリアス

エイリアスを直接的なインデックス名ではなく、ほとんどのプロセシングに使用することが期待されます。

つまり、「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 スクロールクエリを使用して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);

クエリによるインデックス化

これはデータベースを「ソース」として使用し、findEachクエリを実行してすべての行(ORMグラフ)を反復処理してインデックスを作成するという点で、indexAllと似ています。

Query<Product> query = server.find(Product.class)
  .where()
  .ge("whenModified", new Timestamp(since))
  .startsWith("sku", "C")
  .query();

  server.docStore().indexByQuery(query, 1000);