You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2018/09/22 03:47:33 UTC
lucene-solr:master: LUCENE-8511: MultiFields.getIndexedFields
optimize to not call getMergedFieldInfos
Repository: lucene-solr
Updated Branches:
refs/heads/master 60569fbe4 -> 4ccf0fb8f
LUCENE-8511: MultiFields.getIndexedFields optimize to not call getMergedFieldInfos
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/4ccf0fb8
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/4ccf0fb8
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/4ccf0fb8
Branch: refs/heads/master
Commit: 4ccf0fb8f6ce269de8b4501fca201f5b4763cfe7
Parents: 60569fb
Author: David Smiley <ds...@apache.org>
Authored: Fri Sep 21 23:47:10 2018 -0400
Committer: David Smiley <ds...@apache.org>
Committed: Fri Sep 21 23:47:10 2018 -0400
----------------------------------------------------------------------
lucene/CHANGES.txt | 3 +++
.../org/apache/lucene/index/MultiFields.java | 27 ++++++++------------
2 files changed, 13 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ccf0fb8/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 70badd8..d305759 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -170,6 +170,9 @@ Optimizations
* LUCENE-8448: Boolean queries now propagates the mininum score to their sub-scorers.
(Jim Ferenczi, Adrien Grand)
+* LUCENE-8511: MultiFields.getIndexedFields is now optimized; does not call getMergedFieldInfos
+ (David Smiley)
+
======================= Lucene 7.6.0 =======================
Build
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/4ccf0fb8/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MultiFields.java b/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
index 19078a8..32ce2fa 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MultiFields.java
@@ -21,12 +21,13 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
@@ -266,7 +267,8 @@ public final class MultiFields extends Fields {
public static FieldInfos getMergedFieldInfos(IndexReader reader) {
final String softDeletesField = reader.leaves().stream()
.map(l -> l.reader().getFieldInfos().getSoftDeletesField())
- .filter(Objects::nonNull).findAny().orElse(null);
+ .filter(Objects::nonNull)
+ .findAny().orElse(null);
final FieldInfos.Builder builder = new FieldInfos.Builder(new FieldInfos.FieldNumbers(softDeletesField));
for(final LeafReaderContext ctx : reader.leaves()) {
builder.add(ctx.reader().getFieldInfos());
@@ -274,22 +276,13 @@ public final class MultiFields extends Fields {
return builder.finish();
}
- /** Call this to get the (merged) FieldInfos representing the
- * set of indexed fields <b>only</b> for a composite reader.
- * <p>
- * NOTE: the returned field numbers will likely not
- * correspond to the actual field numbers in the underlying
- * readers, and codec metadata ({@link FieldInfo#getAttribute(String)}
- * will be unavailable.
- */
+ /** Returns a set of names of fields that have a terms index. The order is undefined. */
public static Collection<String> getIndexedFields(IndexReader reader) {
- final Collection<String> fields = new HashSet<>();
- for(final FieldInfo fieldInfo : getMergedFieldInfos(reader)) {
- if (fieldInfo.getIndexOptions() != IndexOptions.NONE) {
- fields.add(fieldInfo.name);
- }
- }
- return fields;
+ return reader.leaves().stream()
+ .flatMap(l -> StreamSupport.stream(l.reader().getFieldInfos().spliterator(), false)
+ .filter(fi -> fi.getIndexOptions() != IndexOptions.NONE))
+ .map(fi -> fi.name)
+ .collect(Collectors.toSet());
}
private static class LeafReaderFields extends Fields {