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 {