diff options
Diffstat (limited to 'nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9')
8 files changed, 63 insertions, 81 deletions
diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java index d70fea103..2bd47ed97 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java @@ -13,10 +13,11 @@ package org.apache.couchdb.nouveau.lucene9; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response.Status; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; - import org.apache.couchdb.nouveau.api.IndexDefinition; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.ar.ArabicAnalyzer; @@ -59,13 +60,9 @@ import org.apache.lucene.analysis.sv.SwedishAnalyzer; import org.apache.lucene.analysis.th.ThaiAnalyzer; import org.apache.lucene.analysis.tr.TurkishAnalyzer; -import jakarta.ws.rs.WebApplicationException; -import jakarta.ws.rs.core.Response.Status; - public final class Lucene9AnalyzerFactory { - private Lucene9AnalyzerFactory() { - } + private Lucene9AnalyzerFactory() {} public static Analyzer fromDefinition(final IndexDefinition indexDefinition) { final Analyzer defaultAnalyzer = newAnalyzer(indexDefinition.getDefaultAnalyzer()); @@ -73,14 +70,14 @@ public final class Lucene9AnalyzerFactory { return defaultAnalyzer; } final Map<String, Analyzer> fieldAnalyzers = new HashMap<String, Analyzer>(); - for (Map.Entry<String, String> entry : indexDefinition.getFieldAnalyzers().entrySet()) { + for (Map.Entry<String, String> entry : + indexDefinition.getFieldAnalyzers().entrySet()) { fieldAnalyzers.put(entry.getKey(), newAnalyzer(entry.getValue())); } return new PerFieldAnalyzerWrapper(defaultAnalyzer, fieldAnalyzers); } private enum KnownAnalyzer { - arabic(ArabicAnalyzer::new), armenian(ArmenianAnalyzer::new), basque(BasqueAnalyzer::new), @@ -139,5 +136,4 @@ public final class Lucene9AnalyzerFactory { throw new WebApplicationException(name + " is not a valid analyzer name", Status.BAD_REQUEST); } } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java index addb801f1..0de610f84 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java @@ -13,6 +13,8 @@ package org.apache.couchdb.nouveau.lucene9; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response.Status; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; @@ -31,7 +33,6 @@ import java.util.Map.Entry; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; - import org.apache.couchdb.nouveau.api.DocumentDeleteRequest; import org.apache.couchdb.nouveau.api.DocumentUpdateRequest; import org.apache.couchdb.nouveau.api.DoubleField; @@ -89,20 +90,20 @@ import org.apache.lucene.search.TopFieldCollector; import org.apache.lucene.store.Directory; import org.apache.lucene.util.BytesRef; -import jakarta.ws.rs.WebApplicationException; -import jakarta.ws.rs.core.Response.Status; - public class Lucene9Index extends Index { - private static final Sort DEFAULT_SORT = new Sort(SortField.FIELD_SCORE, - new SortField("_id", SortField.Type.STRING)); + private static final Sort DEFAULT_SORT = + new Sort(SortField.FIELD_SCORE, new SortField("_id", SortField.Type.STRING)); private static final Pattern SORT_FIELD_RE = Pattern.compile("^([-+])?([\\.\\w]+)(?:<(\\w+)>)$"); private final Analyzer analyzer; private final IndexWriter writer; private final SearcherManager searcherManager; - public Lucene9Index(final Analyzer analyzer, final IndexWriter writer, final long updateSeq, + public Lucene9Index( + final Analyzer analyzer, + final IndexWriter writer, + final long updateSeq, final SearcherManager searcherManager) { super(updateSeq); this.analyzer = Objects.requireNonNull(analyzer); @@ -147,7 +148,8 @@ public class Lucene9Index extends Index { if (!writer.hasUncommittedChanges()) { return false; } - writer.setLiveCommitData(Collections.singletonMap("update_seq", Long.toString(updateSeq)).entrySet()); + writer.setLiveCommitData( + Collections.singletonMap("update_seq", Long.toString(updateSeq)).entrySet()); writer.commit(); return true; } @@ -213,11 +215,7 @@ public class Lucene9Index extends Index { fieldDoc = null; } - return TopFieldCollector.createSharedManager( - sort, - searchRequest.getLimit(), - fieldDoc, - 1000); + return TopFieldCollector.createSharedManager(sort, searchRequest.getLimit(), fieldDoc, 1000); } private SortField getLastSortField(final Sort sort) { @@ -225,8 +223,9 @@ public class Lucene9Index extends Index { return sortFields[sortFields.length - 1]; } - private SearchResults toSearchResults(final SearchRequest searchRequest, final IndexSearcher searcher, - final Object[] reduces) throws IOException { + private SearchResults toSearchResults( + final SearchRequest searchRequest, final IndexSearcher searcher, final Object[] reduces) + throws IOException { final SearchResults result = new SearchResults(); collectHits(searcher, (TopDocs) reduces[0], result); if (reduces.length == 2) { @@ -243,7 +242,8 @@ public class Lucene9Index extends Index { for (final ScoreDoc scoreDoc : topDocs.scoreDocs) { final Document doc = storedFields.document(scoreDoc.doc); - final List<StoredField> fields = new ArrayList<StoredField>(doc.getFields().size()); + final List<StoredField> fields = + new ArrayList<StoredField>(doc.getFields().size()); for (IndexableField field : doc.getFields()) { if (field.name().equals("_id")) { continue; @@ -273,14 +273,18 @@ public class Lucene9Index extends Index { searchResults.setHits(hits); } - private void collectFacets(final SearchRequest searchRequest, final IndexSearcher searcher, - final FacetsCollector fc, final SearchResults searchResults) throws IOException { + private void collectFacets( + final SearchRequest searchRequest, + final IndexSearcher searcher, + final FacetsCollector fc, + final SearchResults searchResults) + throws IOException { if (searchRequest.hasCounts()) { final Map<String, Map<String, Number>> countsMap = new HashMap<String, Map<String, Number>>( searchRequest.getCounts().size()); for (final String field : searchRequest.getCounts()) { - final StringDocValuesReaderState state = new StringDocValuesReaderState(searcher.getIndexReader(), - field); + final StringDocValuesReaderState state = + new StringDocValuesReaderState(searcher.getIndexReader(), field); final StringValueFacetCounts counts = new StringValueFacetCounts(state, fc); countsMap.put(field, collectFacets(counts, searchRequest.getTopN(), field)); } @@ -290,7 +294,8 @@ public class Lucene9Index extends Index { if (searchRequest.hasRanges()) { final Map<String, Map<String, Number>> rangesMap = new HashMap<String, Map<String, Number>>( searchRequest.getRanges().size()); - for (final Entry<String, List<DoubleRange>> entry : searchRequest.getRanges().entrySet()) { + for (final Entry<String, List<DoubleRange>> entry : + searchRequest.getRanges().entrySet()) { final DoubleRangeFacetCounts counts = toDoubleRangeFacetCounts(fc, entry.getKey(), entry.getValue()); rangesMap.put(entry.getKey(), collectFacets(counts, searchRequest.getTopN(), entry.getKey())); } @@ -298,15 +303,17 @@ public class Lucene9Index extends Index { } } - private DoubleRangeFacetCounts toDoubleRangeFacetCounts(final FacetsCollector fc, final String field, - final List<DoubleRange> ranges) throws IOException { - final org.apache.lucene.facet.range.DoubleRange[] luceneRanges = new org.apache.lucene.facet.range.DoubleRange[ranges - .size()]; + private DoubleRangeFacetCounts toDoubleRangeFacetCounts( + final FacetsCollector fc, final String field, final List<DoubleRange> ranges) throws IOException { + final org.apache.lucene.facet.range.DoubleRange[] luceneRanges = + new org.apache.lucene.facet.range.DoubleRange[ranges.size()]; for (int i = 0; i < luceneRanges.length; i++) { final DoubleRange range = ranges.get(i); luceneRanges[i] = new org.apache.lucene.facet.range.DoubleRange( - range.getLabel(), range.getMin() != null ? range.getMin() : Double.NEGATIVE_INFINITY, - range.isMinInclusive(), range.getMax() != null ? range.getMax() : Double.POSITIVE_INFINITY, + range.getLabel(), + range.getMin() != null ? range.getMin() : Double.NEGATIVE_INFINITY, + range.isMinInclusive(), + range.getMax() != null ? range.getMax() : Double.POSITIVE_INFINITY, range.isMaxInclusive()); } return new DoubleRangeFacetCounts(field, fc, luceneRanges); @@ -355,8 +362,7 @@ public class Lucene9Index extends Index { } final Matcher m = SORT_FIELD_RE.matcher(sortString); if (!m.matches()) { - throw new WebApplicationException( - sortString + " is not a valid sort parameter", Status.BAD_REQUEST); + throw new WebApplicationException(sortString + " is not a valid sort parameter", Status.BAD_REQUEST); } final boolean reverse = "-".equals(m.group(1)); switch (m.group(3)) { @@ -365,8 +371,7 @@ public class Lucene9Index extends Index { case "double": return new SortedNumericSortField(m.group(2), SortField.Type.DOUBLE, reverse); default: - throw new WebApplicationException( - m.group(3) + " is not a valid sort type", Status.BAD_REQUEST); + throw new WebApplicationException(m.group(3) + " is not a valid sort type", Status.BAD_REQUEST); } } @@ -391,16 +396,16 @@ public class Lucene9Index extends Index { } if (field instanceof TextField) { var f = (TextField) field; - result.add(new org.apache.lucene.document.TextField(f.getName(), f.getValue(), - f.isStore() ? Store.YES : Store.NO)); + result.add(new org.apache.lucene.document.TextField( + f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO)); } else if (field instanceof StringField) { var f = (StringField) field; - result.add(new org.apache.lucene.document.KeywordField(f.getName(), f.getValue(), - f.isStore() ? Store.YES : Store.NO)); + result.add(new org.apache.lucene.document.KeywordField( + f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO)); } else if (field instanceof DoubleField) { var f = (DoubleField) field; - result.add(new org.apache.lucene.document.DoubleField(f.getName(), f.getValue(), - f.isStore() ? Store.YES : Store.NO)); + result.add(new org.apache.lucene.document.DoubleField( + f.getName(), f.getValue(), f.isStore() ? Store.YES : Store.NO)); } else if (field instanceof StoredField) { var f = (StoredField) field; var val = f.getValue(); @@ -505,5 +510,4 @@ public class Lucene9Index extends Index { return "Lucene9Index [analyzer=" + analyzer + ", writer=" + writer + ", searcherManager=" + searcherManager + "]"; } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java index 8d5555692..06102de84 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java @@ -13,10 +13,9 @@ package org.apache.couchdb.nouveau.lucene9; -import org.apache.lucene.search.Query; - import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.module.SimpleModule; +import org.apache.lucene.search.Query; public class Lucene9Module extends SimpleModule { @@ -27,5 +26,4 @@ public class Lucene9Module extends SimpleModule { addSerializer(Query.class, new QuerySerializer()); addDeserializer(Query.class, new QueryDeserializer()); } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java index 6aad65cd4..6516efc2c 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java @@ -16,7 +16,6 @@ package org.apache.couchdb.nouveau.lucene9; import java.text.NumberFormat; import java.text.ParseException; import java.util.List; - import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.queryparser.flexible.core.QueryNodeException; import org.apache.lucene.queryparser.flexible.core.QueryParserHelper; @@ -116,7 +115,7 @@ public final class NouveauQueryParser extends QueryParserHelper { if (node instanceof FieldQueryNode && !(node.getParent() instanceof RangeQueryNode)) { final var fieldNode = (FieldQueryNode) node; String text = fieldNode.getTextAsString(); - if (text.length() == 0) { + if (text.isEmpty()) { return node; } final Number number; @@ -159,8 +158,7 @@ public final class NouveauQueryParser extends QueryParserHelper { final var lowerInclusive = termRangeNode.isLowerInclusive(); final var upperInclusive = termRangeNode.isUpperInclusive(); - return new PointRangeQueryNode( - lowerNode, upperNode, lowerInclusive, upperInclusive, pointsConfig); + return new PointRangeQueryNode(lowerNode, upperNode, lowerInclusive, upperInclusive, pointsConfig); } return node; @@ -175,7 +173,5 @@ public final class NouveauQueryParser extends QueryParserHelper { protected List<QueryNode> setChildrenOrder(final List<QueryNode> children) throws QueryNodeException { return children; } - } - -}
\ No newline at end of file +} diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java index 91fee1795..4553fa76b 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java @@ -15,7 +15,6 @@ package org.apache.couchdb.nouveau.lucene9; import java.io.IOException; import java.util.concurrent.Executor; - import org.apache.lucene.index.IndexReader; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.SearcherFactory; @@ -32,5 +31,4 @@ public class ParallelSearcherFactory extends SearcherFactory { public IndexSearcher newSearcher(final IndexReader reader, final IndexReader previousReader) throws IOException { return new IndexSearcher(reader, executor); } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java index 2e3b0278e..cc2cfc827 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QueryDeserializer.java @@ -13,9 +13,14 @@ package org.apache.couchdb.nouveau.lucene9; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import java.io.IOException; import java.util.Iterator; - import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.FuzzyQuery; @@ -27,13 +32,6 @@ import org.apache.lucene.search.RegexpQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - public class QueryDeserializer extends StdDeserializer<Query> { public QueryDeserializer() { @@ -107,15 +105,12 @@ public class QueryDeserializer extends StdDeserializer<Query> { return new RegexpQuery(new Term(field, text)); } case "term_range": { - } case "point_range": { - } case "match_all": - return new MatchAllDocsQuery(); + return new MatchAllDocsQuery(); } throw new JsonParseException(parser, type + " not a supported query type"); } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java index df2f7a675..5e1d50871 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/QuerySerializer.java @@ -13,8 +13,11 @@ package org.apache.couchdb.nouveau.lucene9; +import com.fasterxml.jackson.core.JsonGenerationException; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; - import org.apache.lucene.index.Term; import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; @@ -29,11 +32,6 @@ import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TermRangeQuery; import org.apache.lucene.search.WildcardQuery; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - class QuerySerializer extends StdSerializer<Query> { QuerySerializer() { @@ -167,5 +165,4 @@ class QuerySerializer extends StdSerializer<Query> { throw new JsonGenerationException(query.getClass() + " not supported", gen); } - } diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java index ae7e4c261..6b4c8c642 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/SimpleAsciiFoldingAnalyzer.java @@ -22,8 +22,7 @@ import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilter; class SimpleAsciiFoldingAnalyzer extends Analyzer { - SimpleAsciiFoldingAnalyzer() { - } + SimpleAsciiFoldingAnalyzer() {} @Override protected TokenStreamComponents createComponents(String fieldName) { @@ -35,5 +34,4 @@ class SimpleAsciiFoldingAnalyzer extends Analyzer { protected TokenStream normalize(String fieldName, TokenStream in) { return new ASCIIFoldingFilter(new LowerCaseFilter(in)); } - } |