Skip to content

Commit 99a88e3

Browse files
committed
add lucene version to ddoc and index definition
1 parent 4842ac9 commit 99a88e3

23 files changed

Lines changed: 139 additions & 61 deletions

nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import org.apache.couchdb.nouveau.core.UserAgentFilter;
2525
import org.apache.couchdb.nouveau.health.AnalyzeHealthCheck;
2626
import org.apache.couchdb.nouveau.health.IndexHealthCheck;
27-
import org.apache.couchdb.nouveau.lucene9.Lucene9Module;
28-
import org.apache.couchdb.nouveau.lucene9.ParallelSearcherFactory;
27+
import org.apache.couchdb.nouveau.lucene.LuceneModule;
28+
import org.apache.couchdb.nouveau.lucene.ParallelSearcherFactory;
2929
import org.apache.couchdb.nouveau.resources.AnalyzeResource;
3030
import org.apache.couchdb.nouveau.resources.IndexResource;
3131
import org.apache.couchdb.nouveau.tasks.CloseAllIndexesTask;
@@ -65,7 +65,7 @@ public void run(NouveauApplicationConfiguration configuration, Environment envir
6565
environment.lifecycle().manage(indexManager);
6666

6767
// Serialization classes
68-
environment.getObjectMapper().registerModule(new Lucene9Module());
68+
environment.getObjectMapper().registerModule(new LuceneModule());
6969

7070
// AnalyzeResource
7171
final AnalyzeResource analyzeResource = new AnalyzeResource();

nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
2323
public class IndexDefinition {
2424

25+
public static final int LEGACY_LUCENE_VERSION = 9;
26+
27+
private int luceneVersion = LEGACY_LUCENE_VERSION; // Legacy version if not set.
28+
2529
@NotEmpty
2630
private String defaultAnalyzer;
2731

@@ -31,11 +35,22 @@ public IndexDefinition() {
3135
// Jackson deserialization
3236
}
3337

34-
public IndexDefinition(final String defaultAnalyzer, final Map<String, String> fieldAnalyzers) {
38+
public IndexDefinition(
39+
final int luceneVersion, final String defaultAnalyzer, final Map<String, String> fieldAnalyzers) {
40+
this.luceneVersion = luceneVersion;
3541
this.defaultAnalyzer = defaultAnalyzer;
3642
this.fieldAnalyzers = fieldAnalyzers;
3743
}
3844

45+
@JsonProperty
46+
public int getLuceneVersion() {
47+
return luceneVersion;
48+
}
49+
50+
public void setLuceneVersion(int luceneVersion) {
51+
this.luceneVersion = luceneVersion;
52+
}
53+
3954
@JsonProperty
4055
public String getDefaultAnalyzer() {
4156
return defaultAnalyzer;
@@ -62,6 +77,7 @@ public boolean hasFieldAnalyzers() {
6277
public int hashCode() {
6378
final int prime = 31;
6479
int result = 1;
80+
result = prime * result + luceneVersion;
6581
result = prime * result + ((defaultAnalyzer == null) ? 0 : defaultAnalyzer.hashCode());
6682
result = prime * result + ((fieldAnalyzers == null) ? 0 : fieldAnalyzers.hashCode());
6783
return result;
@@ -73,6 +89,7 @@ public boolean equals(Object obj) {
7389
if (obj == null) return false;
7490
if (getClass() != obj.getClass()) return false;
7591
IndexDefinition other = (IndexDefinition) obj;
92+
if (luceneVersion != other.luceneVersion) return false;
7693
if (defaultAnalyzer == null) {
7794
if (other.defaultAnalyzer != null) return false;
7895
} else if (!defaultAnalyzer.equals(other.defaultAnalyzer)) return false;
@@ -84,6 +101,7 @@ public boolean equals(Object obj) {
84101

85102
@Override
86103
public String toString() {
87-
return "IndexDefinition [defaultAnalyzer=" + defaultAnalyzer + ", fieldAnalyzers=" + fieldAnalyzers + "]";
104+
return "IndexDefinition [luceneVersion=" + luceneVersion + ", defaultAnalyzer=" + defaultAnalyzer
105+
+ ", fieldAnalyzers=" + fieldAnalyzers + "]";
88106
}
89107
}

nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
import java.util.concurrent.locks.Lock;
3535
import java.util.concurrent.locks.ReentrantReadWriteLock;
3636
import org.apache.couchdb.nouveau.api.IndexDefinition;
37-
import org.apache.couchdb.nouveau.lucene9.Lucene9AnalyzerFactory;
38-
import org.apache.couchdb.nouveau.lucene9.Lucene9Index;
37+
import org.apache.couchdb.nouveau.lucene.LuceneAnalyzerFactory;
38+
import org.apache.couchdb.nouveau.lucene.LuceneIndex;
3939
import org.apache.lucene.analysis.Analyzer;
4040
import org.apache.lucene.index.IndexWriter;
4141
import org.apache.lucene.index.IndexWriterConfig;
@@ -392,15 +392,16 @@ private Index load(final String name) throws IOException {
392392
LOGGER.info("opening {}", name);
393393
final Path path = indexPath(name);
394394
final IndexDefinition indexDefinition = loadIndexDefinition(name);
395-
final Analyzer analyzer = Lucene9AnalyzerFactory.fromDefinition(indexDefinition);
396-
final Directory dir = new DirectIODirectory(FSDirectory.open(path.resolve("9")));
395+
final Analyzer analyzer = LuceneAnalyzerFactory.fromDefinition(indexDefinition);
396+
final Directory dir = new DirectIODirectory(
397+
FSDirectory.open(path.resolve(Integer.toString(indexDefinition.getLuceneVersion()))));
397398
final IndexWriterConfig config = new IndexWriterConfig(analyzer);
398399
config.setUseCompoundFile(false);
399400
final IndexWriter writer = new IndexWriter(dir, config);
400401
final long updateSeq = getSeq(writer, "update_seq");
401402
final long purgeSeq = getSeq(writer, "purge_seq");
402403
final SearcherManager searcherManager = new SearcherManager(writer, searcherFactory);
403-
return new Lucene9Index(analyzer, writer, updateSeq, purgeSeq, searcherManager);
404+
return new LuceneIndex(analyzer, writer, updateSeq, purgeSeq, searcherManager);
404405
}
405406

406407
private long getSeq(final IndexWriter writer, final String key) throws IOException {

nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexHealthCheck.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ public IndexHealthCheck(final IndexResource indexResource) {
3232

3333
@Override
3434
protected Result check() throws Exception {
35-
final String name = "___test9";
35+
final String name = "___test";
3636
try {
3737
indexResource.deletePath(name, null);
3838
} catch (IOException e) {
3939
// Ignored, index might not exist yet.
4040
}
4141

42-
indexResource.createIndex(name, new IndexDefinition("standard", null));
42+
indexResource.createIndex(name, new IndexDefinition(IndexDefinition.LEGACY_LUCENE_VERSION, "standard", null));
4343
try {
4444
final DocumentUpdateRequest documentUpdateRequest =
4545
new DocumentUpdateRequest(0, 1, null, Collections.emptyList());

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneAnalyzerFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import jakarta.ws.rs.WebApplicationException;
1717
import jakarta.ws.rs.core.Response.Status;
@@ -60,9 +60,9 @@
6060
import org.apache.lucene.analysis.th.ThaiAnalyzer;
6161
import org.apache.lucene.analysis.tr.TurkishAnalyzer;
6262

63-
public final class Lucene9AnalyzerFactory {
63+
public final class LuceneAnalyzerFactory {
6464

65-
private Lucene9AnalyzerFactory() {}
65+
private LuceneAnalyzerFactory() {}
6666

6767
public static Analyzer fromDefinition(final IndexDefinition indexDefinition) {
6868
final Analyzer defaultAnalyzer = newAnalyzer(indexDefinition.getDefaultAnalyzer());

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Index.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndex.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import jakarta.ws.rs.WebApplicationException;
1717
import jakarta.ws.rs.core.Response.Status;
@@ -97,7 +97,7 @@
9797
import org.apache.lucene.store.Directory;
9898
import org.apache.lucene.util.BytesRef;
9999

100-
public class Lucene9Index extends Index {
100+
public class LuceneIndex extends Index {
101101

102102
private static final Sort DEFAULT_SORT =
103103
new Sort(SortField.FIELD_SCORE, new SortField("_id", SortField.Type.STRING));
@@ -106,9 +106,9 @@ public class Lucene9Index extends Index {
106106
private final Analyzer analyzer;
107107
private final IndexWriter writer;
108108
private final SearcherManager searcherManager;
109-
private final Lucene9IndexSchema schema;
109+
private final LuceneIndexSchema schema;
110110

111-
public Lucene9Index(
111+
public LuceneIndex(
112112
final Analyzer analyzer,
113113
final IndexWriter writer,
114114
final long updateSeq,
@@ -537,22 +537,22 @@ private Query parse(final SearchRequest request) {
537537
return result;
538538
}
539539

540-
private Lucene9IndexSchema initSchema(IndexWriter writer) {
540+
private LuceneIndexSchema initSchema(IndexWriter writer) {
541541
var commitData = writer.getLiveCommitData();
542542
if (commitData == null) {
543-
return Lucene9IndexSchema.emptySchema();
543+
return LuceneIndexSchema.emptySchema();
544544
}
545545
for (var entry : commitData) {
546546
if (entry.getKey().equals("_schema")) {
547-
return Lucene9IndexSchema.fromString(entry.getValue());
547+
return LuceneIndexSchema.fromString(entry.getValue());
548548
}
549549
}
550-
return Lucene9IndexSchema.emptySchema();
550+
return LuceneIndexSchema.emptySchema();
551551
}
552552

553553
@Override
554554
public String toString() {
555-
return "Lucene9Index [analyzer=" + analyzer + ", writer=" + writer + ", searcherManager=" + searcherManager
555+
return "LuceneIndex [analyzer=" + analyzer + ", writer=" + writer + ", searcherManager=" + searcherManager
556556
+ "]";
557557
}
558558

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9IndexSchema.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneIndexSchema.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import jakarta.ws.rs.WebApplicationException;
1717
import jakarta.ws.rs.core.Response.Status;
@@ -32,7 +32,7 @@
3232
import org.apache.couchdb.nouveau.api.TextField;
3333
import org.apache.lucene.queryparser.flexible.standard.config.PointsConfig;
3434

35-
final class Lucene9IndexSchema {
35+
final class LuceneIndexSchema {
3636

3737
public enum Type {
3838
STRING,
@@ -56,23 +56,23 @@ private static Type fromField(final Field field) {
5656

5757
private final ConcurrentMap<String, Type> map;
5858

59-
private Lucene9IndexSchema(Map<String, Type> map) {
59+
private LuceneIndexSchema(Map<String, Type> map) {
6060
this.map = new ConcurrentHashMap<>(map);
6161
this.map.put("_id", Type.STRING);
6262
}
6363

64-
public static Lucene9IndexSchema emptySchema() {
65-
return new Lucene9IndexSchema(new HashMap<String, Type>());
64+
public static LuceneIndexSchema emptySchema() {
65+
return new LuceneIndexSchema(new HashMap<String, Type>());
6666
}
6767

68-
public static Lucene9IndexSchema fromString(final String schemaStr) {
68+
public static LuceneIndexSchema fromString(final String schemaStr) {
6969
Objects.requireNonNull(schemaStr);
7070
if (schemaStr.isEmpty()) {
7171
return emptySchema();
7272
}
7373
var map = Arrays.stream(schemaStr.split(","))
7474
.collect(Collectors.toMap(i -> i.split(":")[0], i -> Type.valueOf(i.split(":")[1])));
75-
return new Lucene9IndexSchema(map);
75+
return new LuceneIndexSchema(map);
7676
}
7777

7878
public void update(final Collection<Field> fields) {

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Module.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/LuceneModule.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import com.fasterxml.jackson.core.Version;
1717
import com.fasterxml.jackson.databind.module.SimpleModule;
1818
import org.apache.lucene.search.Query;
1919

20-
public class Lucene9Module extends SimpleModule {
20+
public class LuceneModule extends SimpleModule {
2121

22-
public Lucene9Module() {
23-
super("lucene9", Version.unknownVersion());
22+
public LuceneModule() {
23+
super("lucene", Version.unknownVersion());
2424

2525
// Query
2626
addSerializer(Query.class, new QuerySerializer());

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/NouveauQueryParser.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/NouveauQueryParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import java.util.Map;
1717
import org.apache.lucene.analysis.Analyzer;

nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/ParallelSearcherFactory.java renamed to nouveau/src/main/java/org/apache/couchdb/nouveau/lucene/ParallelSearcherFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
// See the License for the specific language governing permissions and
1212
// limitations under the License.
1313

14-
package org.apache.couchdb.nouveau.lucene9;
14+
package org.apache.couchdb.nouveau.lucene;
1515

1616
import java.io.IOException;
1717
import java.util.concurrent.Executor;

0 commit comments

Comments
 (0)