Làm thế nào bạn có được những enums đã thay đổi. Điểm vào chính là lớp Fields
. Nếu bạn biết người đọc của bạn là một người đọc phân khúc duy nhất, làm này:
Fields fields = reader.Fields();
if (fields != null) {
...
}
Nếu người đọc có thể là nhiều giai đoạn, bạn phải làm điều này:
Fields fields = MultiFields.getFields(reader);
if (fields != null) {
...
}
Các fields
có thể null
(ví dụ nếu người đọc không có trường nào).
Lưu ý rằng cách tiếp cận MultiFields
đòi hỏi phải có hiệu suất đạt trên MultiReaders
vì phải hợp nhất các điều khoản/tài liệu/vị trí khi đang di chuyển. Thay vào đó, thay vào đó, bạn có thể sử dụng số để có được trình đọc tuần tự (sử dụng oal.util.ReaderUtil
) và sau đó tự mình đọc từng bước, nếu bạn có thể (đây là cách Lucene thúc đẩy tìm kiếm).
Nếu bạn vượt qua SegmentReader
đến MultiFields.fields
, nó sẽ chỉ đơn giản là trả về reader.fields()
, do đó không có hiệu suất nào xảy ra trong trường hợp đó.
Một khi bạn có một Fields không null bạn có thể làm điều này:
Terms terms = fields.terms("field");
if (terms != null) {
...
}
Các terms
có thể null
(ví dụ: nếu trường không tồn tại).
Một khi bạn có một phi null
thuật ngữ mà bạn có thể nhận được một enum như thế này:
TermsEnum termsEnum = terms.iterator();
Các trở TermsEnum
sẽ không được null.
Bạn có thể sau đó .next()
qua TermsEnum
Tôi chỉ chuyển một phần câu trả lời cho các câu trả lời bạn đánh dấu vì nó có thể gây nhầm lẫn và không trực quan để tìm kiếm và tìm câu trả lời trong việc xây dựng câu hỏi. – MahNas92