Lucene のアップグレード
このページには、Lucene ライブラリのバージョン 3.3 から 7.3 へのアップグレードに関連する大幅な変更が含まれています。
変更
Jira コードおよび jira-lucene-dmz.jar
Jira コードから、不要になったいくつかのメソッドを削除しました。一部については、使用できる代わりのメソッドを提供しています。
com.atlassian.jira.util.BuildUtilsInfo#getLuceneVersion
変更点:
クラスが削除されました。
com.atlassian.jira.issue.index.indexers.impl.VersionCustomFieldIndexer
変更されるメソッド:
public void addDocumentFields(final Document doc, final Issue issue, final Field.Index indexType)
変更点:
フィールドのインデックス作成および保存を行うには、このメソッドを使用します。
addDocumentFieldsSearchable(final Document doc, final Issue issue)
インデックスを作成せずにフィールドを保存するには、このメソッドを使用します。
addDocumentFieldsNotSearchable(final Document doc, final Issue issue)
com/atlassian/jira/config/properties/APKeys$JiraIndexConfiguration
変更点:
getMaxFieldLength
は削除されました。
com/atlassian/jira/config/properties/APKeys$JiraIndexConfiguration$MergePolicy
変更点:
EXPUNGE_DELETES_PCT_ALLOWED
は削除されました。
com.atlassian.jira.web.component.IssuePage
com.atlassian.jira.web.component.IssuePager
変更点:
名前の変更 → com.atlassian.jira.web.component.ResultPage
名前の変更 → com.atlassian.jira.web.component.Pager
com.atlassian.jira.issue.search.SearchResults
変更点:
- これまでは List<Issue> の保持に使用
現在 →
holds List<T>
SearchService uses List<Issue>
,SearchProvider uses List<DocumentWithId>
- メソッド getIssues
→ getResults
に名前を変更
- new method transform
for transforming results of one type to another
- class used to have 3 constructors → Old constructor logic moved to com.atlassian.jira.issue.search.IssueSearchResultsFactory
and com.atlassian.jira.issue.search.DocumentSearchResultsFactory
com.atlassian.jira.issue.search.SearchProvider
変更点:
searchCount
→ 名前の変更 →getHitCount
search
:パラメータを
com.atlassian.jira.issue.search.SearchQuery
オブジェクトに含めるように変更新しいパラメータ
fieldsToLoad
。読み込むドキュメント フィールドを制限したり、空集合を渡してドキュメントのみを読み込んだりします。
新しい戻り値の型
com.atlassian.jira.issue.search.DocumentWithId
。読み込み済みの Lucene ドキュメントおよびその内部 Lucene ID を保持します。この ID は、現在のIndexReader
のコンテキストでのみ有効です。これはキャッシュしないでください。Collector
を使用するsearchAndSort
を削除 (Collector
を使用する通常の検索は可能)。Collector collector = new MyCollector(); searchProvider.searchAndSort(query, user, collector, pager); return collector.getResults();
com.atlassian.jira.index.ManagedIndexSearcher
org.apache.lucene.search.IndexSearcher
では、検索者のライフサイクルの管理元が明確ではありませんでした。
変更点:
新しいクラスを 2 つ追加しました。
com.atlassian.jira.index.ManagedIndexSearcher
は、手動で閉じる必要はありません。com.atlassian.jira.index.UnmanagedIndexSearcher
は、そのユーザーが閉じる必要があります。
AbstractOneDimensionalHitCollector
DocumentHitCollector
変更点:
public void doSetNextReader(LeafReaderContext context)
に変更されました。
FieldableDocumentHitCollector
変更点:
クラスの名前を FieldDocumentHitCollector
に変更
MappedSortComparator
public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed)
は IOException
をスローします。
変更点:
public FieldComparator newComparator(String fieldname, int numHits, int sortPos, boolean reversed)
OneDimensionalTermHitCollector
public OneDimensionalTermHitCollector (final String fieldId, final FieldVisibilityManager fieldVisibilityManager, final ReaderCache readerCache, final FieldManager fieldManager, final ProjectManager projectManager)
変更点:
public OneDimensionalTermHitCollector(final String fieldId, final FieldVisibilityManager fieldVisibilityManager, final ReaderCache readerCache, final FieldManager fieldManager
ReaderCache
Collection<String>[] get(LeafReader reader, String key, Supplier<Collection<String>[]> supplier);
JiraDocValues getDocValues(LeafReader indexReader, String field);
変更点:
{@link ReaderCache}
は Lucene {@link org.apache.lucene.index.DocValues}
を使用しています。
JiraDocValues getDocValues(IndexReader indexReader, String field);
CustomFieldStattable
StatisticsMapper getStatisticsMapper(CustomField customField);
変更点:
コントラクトの変更。Jira 8.0 以降、"stattable" フィールドには次の型の doc value が必要です。
{@link org.apache.lucene.index.SortedDocValues},
{@link org.apache.lucene.index.SortedSetDocValues}
、または {@link org.apache.lucene.index.BinaryDocValues}
com.atlassian.jira.jql.util.JqlDateSupport
変更点:
getIndexedValue →
を削除。日付は long 型としてインデックスに直接保存されるようになりました。
com.atlassian.jira.jql.util.JqlLocalDateSupport
変更点:
getIndexedValue
を削除 → ローカル日付は long 型としてインデックスに直接保存されるようになりました。
com.atlassian.jira.util.LuceneUtils
日付およびローカル日付を従来のストリングベースのインデックス形式に変換、またはその逆の変換を行うためのさまざまなメソッド。
変更点:
このクラスは削除されました。日付およびローカル日付は long 型としてインデックスに追加されます。
com.atlassian.jira.issue.customfields.NaturallyOrderedCustomFieldsSearcher
変更点:
1 つのメソッドにより拡張された SPI: public SortField.Type getSortFieldType();
com.atlassian.jira.index.NumberTools
com.atlassian.jira.util.LuceneNumericUtils
移行済み → com.atlassian.jira.lucenelegacy.NumberTools
移行済み → com.atlassian.jira.lucenelegacy.NumericUtils
com.atlassian.jira.issue.search.QueryPermissions
削除済み → com.atlassian.jira.issue.search.SearchQuery
を参照
com.atlassian.jira.issue.search.SearchQuery
変更点:
QueryPermissions
フィールドの削除ApplicationUser user
およびboolean overrideSecurity
を直接設定します。user
は、権限およびcom.atlassian.jira.jql.query.QueryCreationContext.
の作成に使用されます。overrideSecurity = true
の場合もこれは必要です。
create
メソッドの削除:
create(Query,QueryPermissions, org.apache.lucene.search.Query)
create(Query,QueryPermissions)
createNoPermissions(Query)
変更点:SearchQuery,
をさらに構成するには以下を使用します。SearchQuery.create(query, user)
overrideSecurity(true)
luceneQuery(andQuery);
Jira によって公開される Lucene API
BooleanQuery の作成
コンストラクタを使用したブール クエリの作成はサポートされなくなりました。代わりに、クエリ ビルダーを使用する必要があります。
ドキュメントの作成
ドキュメントでフィールドを指定するには、Field クラスのサブクラス (StringField
、TextField
、StoredField
) を使用する必要があります。
フィルターの作成
org.apache.lucene.search.Filter
クラスは、BooleanClause.Occur.FILTER
が発生する通常の org.apache.lucene.search.Query
に変更されました。
構成
いくつかの設定項目が削除され、代わりに新しい項目が追加されました。
廃止された構成 | 新しい構成 |
---|---|
| mergePolicy.setForceMergeDeletesPctAllowed
|
mergePolicy.setUseCompoundFile
| indexWriterConfig.setUseCompoundFile
|
- | mergePolicy.setReclaimDeletesWeight
|
- | mergePolicy.setMaxCFSSegmentSizeMB
|
JQL の変更
あいまい検索
以前の Lucene | 新しい Lucene |
---|---|
|
ここで、0 は完全一致、2 は 2 つの変更を許可します。 |
インデックスはスワップ ファイルとみなされる
doc value は仮想アドレス スペースに保存されるため、Java プロセスが多くのメモリ (3 倍のインデックス ファイル) を占有してしているかのように見える場合があります。これは実際の RAM ではなく、メモリにマップされたファイルです。これらは必要に応じてスワップ インおよびスワップ アウトされます。
インデックスの再作成
EAP 04 よりも前の Jira のすべてのバージョンから EAP 04 以降に移行する際、フォラグラウンドでの完全なインデックス再作成を実行する必要があります。EAP 04 では、Lucene インデックスで日付を保存する方法を変更しました。インデックス再作成をバックグラウンドで行うと、Lucene が望ましくない状態 (同じフィールド名でさまざまなタイプが混在する) になるため、目的を達成できません。