Lucene から検索 API に移行する
Lucene に依存しない API
Jira 11 より前のバージョンでは、多くの Jira API がクエリ、ドキュメント、フィールド、ソート機能といった Lucene 固有のデータを公開していました。また、Lucene インデックスを直接参照して、Lucene でサポートされる読み取りまたは書き込み操作を実行することもできました。
Jira 11 以降は、Lucene インデックスへのアクセスが削除され、同等の検索 API が導入されました。これらには com.atlassian.jira.search パッケージの Query、Document、Field、FieldSort が含まれます。
Jira 11 には、課題インデックスを検索するための次のエントリ ポイントがあります。
com.atlassian.jira.bc.issue.search.SearchService: JQL クエリを使用して Jira 課題を取得するなど、ドメイン層へのアクセスを提供します。これは、ほとんどのケースに適しているはずです。com.atlassian.jira.search.issue.IssueDocumentSearchService: クエリを使用してドキュメントを取得するなど、検索ドキュメント層へのアクセスを提供します。これは、特にパフォーマンスとスケーラビリティが重要である、より高度な操作に適しています。例として、次のようなものがあります。- 各課題から限られた量のデータを取得する
- 課題データを集計する
- 大量の結果セットをストリーミングする
com.atlassian.jira.search.index.IndexSearcher: インデックスへの最小レベルのアクセスを提供します。課題の変更履歴やコメント ドキュメントへの直接アクセスなど、高度な操作を可能にします。
Jira API と同等の検索 API の変更に関する詳細なガイダンスについては、Jira API と検索 API の変更点をご覧ください。
外部データ ストレージ
Lucene を使用している場合、インデックスは Jira が実行されているマシンのディスクに保存されます。ただし、OpenSearch は完全に Jira の外部にあるため、特に Jira と検索インデックス間のデータ転送に関して、パフォーマンス特性が異なります。検索 API でコンパイルされるアプリケーション コードは、Lucene では適切に実行されますが、OpenSearch では適切に実行されない可能性があります。その逆も同様です。
すべての検索プラットフォームで最高のユーザー エクスペリエンスを実現するために、Lucene から検索 API に移行する際に分析する必要があるアクセス パターンの例をご紹介します。
データの取得
Jira がディスク上の Lucene からデータを読み込む場合、OpenSearch の検索リクエストにはネットワーク呼び出しが必要です。次のような手法を使用して、検索リクエストの量とコンテンツの両方を最適化することをお勧めします。
- ページネーション: 1 回のユーザー インタラクションで取得する必要がある課題の数を減らします。
- 集約: 処理を検索プラットフォームに移すことで、課題を Jira に取り込む必要性を最小限に抑えます。詳細については、「Lucene Collectors を検索 API に移行する」を参照してください。
- 検索フィルターを厳格化: 可能であれば、Jira 内のフィルタリング機能を利用するのではなく、必要なデータのみを返すようにクエリを最適化します。
- 読み込むフィールドを指定: ドキュメントごとに取得するデータ量を減らします。
並べ替え
検索プラットフォームに関係なく、ソート機能は、インデックス化された値を自然に並べ替えできる場合に最も効率的です。
Jira 11 より前のバージョンでは、カスタム フィールドは org.apache.lucene.search.SortField や FieldComparatorSource といった Lucene のネイティブ メカニズムを使用して、検索インデックスの外部にあるデータをソートできました。検索 API も同様の機能を提供しますが、パフォーマンスのオーバーヘッドが OpenSearch と Lucene で異なります。詳細については、「カスタム フィールドのソート」を参照してください。
Lucene Collectors
Lucene Collectors を使用すると、検索クエリに一致する各ドキュメントのコードを実行できますが、ドキュメントを外部に保存するとコストがかかる可能性があります。検索 API へのコレクターの移行に関する詳細なガイダンスは、「Lucene Collectors を検索 API に移行する」を参照してください 。
厳密にタイプ指定されたインデックス スキーマ
Jira 11 より前のバージョンでは、フィールド インデクサー (com.atlassian.jira.issue.index.indexers.FieldIndexer の実装) によって Lucene ドキュメントに任意のフィールドを追加できました。
検索 API のフィールド インデクサー (com.atlassian.jira.search.issue.index.indexers.FieldIndexer の実装) は、プラットフォームに依存しないように設計されています。複数のプラットフォーム間の互換性を確保するために、次のフィールド定義制限が適用されます。
- Fields must be pre-defined and registered as part of the index schema.
- Field names must be unique.
フィールド インデクサーを検索 API に移行する詳細なガイダンスについては、移行ガイドを参照してください。