You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2023/01/06 14:01:34 UTC

[couchdb] 03/07: use DocField in search response

This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch import-nouveau-reorg
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 0298e3a0a9b468611ae4bd08a683081a26259abe
Author: Robert Newson <rn...@apache.org>
AuthorDate: Fri Jan 6 00:08:15 2023 +0000

    use DocField in search response
---
 .../org/apache/couchdb/nouveau/api/SearchHit.java  |  8 +++----
 .../couchdb/nouveau/core/lucene9/Lucene9Index.java | 27 ++++++++++++++++++----
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
index f268def58..deeb4536d 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/api/SearchHit.java
@@ -18,7 +18,7 @@ import java.util.Collection;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
-import org.apache.couchdb.nouveau.l9x.lucene.index.IndexableField;
+import org.apache.couchdb.nouveau.api.document.DocField;
 import org.apache.couchdb.nouveau.l9x.lucene.search.FieldDoc;
 
 import io.dropwizard.jackson.JsonSnakeCase;
@@ -33,12 +33,12 @@ public class SearchHit {
     private FieldDoc order;
 
     @NotNull
-    private Collection<@NotNull IndexableField> fields;
+    private Collection<@NotNull DocField> fields;
 
     public SearchHit() {
     }
 
-    public SearchHit(final String id, final FieldDoc order, final Collection<IndexableField> fields) {
+    public SearchHit(final String id, final FieldDoc order, final Collection<DocField> fields) {
         this.id = id;
         this.order = order;
         this.fields = fields;
@@ -52,7 +52,7 @@ public class SearchHit {
         return order;
     }
 
-    public Collection<IndexableField> getFields() {
+    public Collection<DocField> getFields() {
         return fields;
     }
 
diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
index c1ad64db5..c17fe3a04 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/core/lucene9/Lucene9Index.java
@@ -44,6 +44,7 @@ import org.apache.couchdb.nouveau.l9x.lucene.document.Document;
 import org.apache.couchdb.nouveau.l9x.lucene.document.DoublePoint;
 import org.apache.couchdb.nouveau.l9x.lucene.document.SortedDocValuesField;
 import org.apache.couchdb.nouveau.l9x.lucene.document.StringField;
+import org.apache.couchdb.nouveau.l9x.lucene.document.TextField;
 import org.apache.couchdb.nouveau.l9x.lucene.document.Field.Store;
 import org.apache.couchdb.nouveau.l9x.lucene.facet.FacetResult;
 import org.apache.couchdb.nouveau.l9x.lucene.facet.Facets;
@@ -207,10 +208,10 @@ class Lucene9Index extends Index {
         for (final ScoreDoc scoreDoc : topDocs.scoreDocs) {
             final Document doc = searcher.doc(scoreDoc.doc);
 
-            final List<IndexableField> fields = new ArrayList<IndexableField>(doc.getFields());
+            final List<DocField> fields = new ArrayList<DocField>(doc.getFields().size());
             for (IndexableField field : doc.getFields()) {
-                if (field.name().equals("_id")) {
-                    fields.remove(field);
+                if (!field.name().startsWith("_")) {
+                    fields.add(luceneFieldToDocField(field));
                 }
             }
 
@@ -315,13 +316,13 @@ class Lucene9Index extends Index {
             if (field.getName().startsWith("_")) {
                 continue;
             }
-            result.add(convertField(field));
+            result.add(docFieldToLuceneField(field));
         }
 
         return result;
     }
 
-    private static IndexableField convertField(final DocField docField) {
+    private static IndexableField docFieldToLuceneField(final DocField docField) {
         if (docField instanceof StringDocField) {
             final StringDocField field = (StringDocField) docField;
             return new StringField(field.getName(), field.getValue(), field.isStored() ? Store.YES : Store.NO);
@@ -337,6 +338,22 @@ class Lucene9Index extends Index {
         throw new IllegalArgumentException(docField.getClass() + " not valid");
     }
 
+    private static DocField luceneFieldToDocField(final IndexableField indexableField) {
+        if (indexableField instanceof StringField) {
+            final StringField field = (StringField) indexableField;
+            return new StringDocField(field.name(), field.stringValue(), field.fieldType().stored());
+        }
+        if (indexableField instanceof TextField) {
+            final TextField field = (TextField) indexableField;
+            return new TextDocField(field.name(), field.stringValue(), field.fieldType().stored());
+        }
+        if (indexableField instanceof DoublePoint) {
+            final DoublePoint field = (DoublePoint) indexableField;
+            return new DoublePointDocField(field.name(), (Double) field.numericValue());
+        }
+        throw new IllegalArgumentException(indexableField.getClass() + " not valid");
+    }
+
     private static Query docIdQuery(final String docId) {
         return new TermQuery(docIdTerm(docId));
     }