assetEntryLocalServiceUtil.getEntriesメソッドで実行されるAssetEntryテーブルへのクエリによるデータベースのスループット問題
knowledge-article-header-disclaimer-how-to
knowledge-article-header-disclaimer
legacy-article
learn-legacy-article-disclaimer-text
問題
assetEntryLocalServiceUtil.getEntriesメソッドを呼び出すカスタム開発があります:
AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setAnyCategoryIds(new long[] { categoriaMesVistos });
assetEntryQuery.setOrderByCol1("priority");
リスト<AssetEntry> assetEntryList = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery)
このメソッドはAssetEntryテーブルへのクエリを実行するため、データベースのスループットに問題が生じる。
どうすれば避けることができますか?
環境
解像度
AssetEntryLocalServiceUtil.getEntriesの
呼び出しを、Elasticsearchインデックスを使用する同等の_assetHelper.searchAssetEntries
メソッドに置き換える必要があります。
アセットパブリッシャーでは、このコード:com.liferay.asset.publisher.web.internal.util.AssetPublisherHelperImplクラスのgetAssetEntriesメソッドは、_isSearchWithIndexの結果に応じてAssetEntryLocalServiceUtil.getEntriesと
_assetHelper.searchAssetEntriesの
両方を使用します。
AssetEntryLocalServiceUtil.getEntriesは
データベースレベルでパフォーマンスの問題を引き起こす可能性があるため、一般的にはElasticsearchに対してクエリを実行する_assetHelper.searchAssetEntries
メソッドを使用することが望ましいです。
リンク先の例でわかるように、どちらのメソッドもassetEntryQuery
オブジェクトを受け取るので、_assetHelper.searchAssetEntriesを
使用するようにコードを適応させるのは簡単です:
-
assetHelper.searchAssetEntriesを
呼び出し、BaseModelSearchResult<AssetEntry>
型のオブジェクトを返します。 このメソッドの呼び出し方にはいくつかの例がある:
-
BaseModelSearchResult<AssetEntry>
オブジェクトを使用して、baseModelSearchResult.getBaseModels(
) メソッドを呼び出し、AssetEntries
のリストを返します。
これらの変更により、このクエリをデータベースに対して実行することを避け、代わりにElasticsearchに対して実行することになります。
did-this-article-resolve-your-issue