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));
}