Lucene から検索 API に移行する

検索ツールのオプションをさらに充実させるために、Jira の検索機能に抽象化レイヤーを導入します。Jira の公開 API から Lucene を削除し、この新しい API を介して検索操作を公開することで、Jira は Lucene や OpenSearch など、基盤となる複数の検索プラットフォームをサポートできるようになりました。

検索 API では、以前に Jira で利用できたものと同様のデータ構造と検索操作が維持されますが、いくつかの重要な違いがあります。

今後の Jira バージョンでも、引き続き機能を追加して検索 API を強化していきます。検索 - 検索 API コンポーネントを使用して JAC で提案チケットを提出することで、新しい検索 API 機能を提案できます。

Lucene に依存しない API

Jira 11 より前のバージョンでは、多くの Jira API がクエリ、ドキュメント、フィールド、ソート機能といった Lucene 固有のデータを公開していました。また、Lucene インデックスを直接参照して、Lucene でサポートされる読み取りまたは書き込み操作を実行することもできました。

Jira 11 以降は、Lucene インデックスへのアクセスが削除され、同等の検索 API が導入されました。これらには com.atlassian.jira.search パッケージの QueryDocumentFieldFieldSort が含まれます。

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.SortFieldFieldComparatorSource といった 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 に移行する詳細なガイダンスについては、移行ガイドを参照してください。

最終更新日 2025 年 6 月 4 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.