summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Newson <rnewson@apache.org>2022-12-22 15:05:28 +0000
committerRobert Newson <rnewson@apache.org>2022-12-22 15:56:09 +0000
commita677cb4e1dc8f3417bea9e0dbbeb69be368f66e1 (patch)
tree732278989ed64898a1df53f707c14170016f5306
parentc64f9d32c965aa5f36cf23b7e523b91eb95eb6e6 (diff)
downloadcouchdb-a677cb4e1dc8f3417bea9e0dbbeb69be368f66e1.tar.gz
Make lucene version of index part of definition and signature
-rw-r--r--java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java12
-rw-r--r--java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java16
-rw-r--r--java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/LuceneVersion.java20
-rw-r--r--java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java3
-rw-r--r--java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexManagerHealthCheck.java3
-rw-r--r--java/nouveau/src/test/java/org/apache/couchdb/nouveau/IntegrationTest.java3
-rw-r--r--java/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java4
-rw-r--r--src/nouveau/include/nouveau.hrl1
-rw-r--r--src/nouveau/src/nouveau_api.erl2
-rw-r--r--src/nouveau/src/nouveau_index_updater.erl1
-rw-r--r--src/nouveau/src/nouveau_util.erl12
11 files changed, 66 insertions, 11 deletions
diff --git a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java
index 5f3fcd1e9..41f7ffdfe 100644
--- a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java
+++ b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/AnalyzeRequest.java
@@ -14,6 +14,7 @@
package org.apache.couchdb.nouveau.api;
import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -22,6 +23,9 @@ import io.dropwizard.jackson.JsonSnakeCase;
@JsonSnakeCase
public class AnalyzeRequest {
+ @NotNull
+ private LuceneVersion luceneVersion;
+
@NotEmpty
private String analyzer;
@@ -33,12 +37,18 @@ public class AnalyzeRequest {
// Jackson deserialization
}
- public AnalyzeRequest(final String analyzer, final String text) {
+ public AnalyzeRequest(final LuceneVersion luceneVersion, final String analyzer, final String text) {
+ this.luceneVersion = luceneVersion;
this.analyzer = analyzer;
this.text = text;
}
@JsonProperty
+ public LuceneVersion getLuceneVersion() {
+ return luceneVersion;
+ }
+
+ @JsonProperty
public String getAnalyzer() {
return analyzer;
}
diff --git a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java
index 265a8c021..d876d3b82 100644
--- a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java
+++ b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexDefinition.java
@@ -16,6 +16,7 @@ package org.apache.couchdb.nouveau.api;
import java.util.Map;
import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -24,6 +25,9 @@ import io.dropwizard.jackson.JsonSnakeCase;
@JsonSnakeCase
public class IndexDefinition {
+ @NotNull
+ private LuceneVersion luceneVersion;
+
@NotEmpty
private String defaultAnalyzer;
@@ -34,12 +38,18 @@ public class IndexDefinition {
// Jackson deserialization
}
- public IndexDefinition(final String defaultAnalyzer, final Map<String, String> fieldAnalyzers) {
+ public IndexDefinition(final LuceneVersion luceneVersion, final String defaultAnalyzer, final Map<String, String> fieldAnalyzers) {
+ this.luceneVersion = luceneVersion;
this.defaultAnalyzer = defaultAnalyzer;
this.fieldAnalyzers = fieldAnalyzers;
}
@JsonProperty
+ public LuceneVersion getLuceneVersion() {
+ return luceneVersion;
+ }
+
+ @JsonProperty
public String getDefaultAnalyzer() {
return defaultAnalyzer;
}
@@ -63,8 +73,8 @@ public class IndexDefinition {
@Override
public String toString() {
- return "IndexDefinition [defaultAnalyzer=" + defaultAnalyzer + ", fieldAnalyzers=" + fieldAnalyzers
- + "]";
+ return "IndexDefinition [luceneVersion=" + luceneVersion + ", defaultAnalyzer=" + defaultAnalyzer +
+ ", fieldAnalyzers=" + fieldAnalyzers + "]";
}
}
diff --git a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/LuceneVersion.java b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/LuceneVersion.java
new file mode 100644
index 000000000..55da30fcf
--- /dev/null
+++ b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/api/LuceneVersion.java
@@ -0,0 +1,20 @@
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.couchdb.nouveau.api;
+
+public enum LuceneVersion {
+
+ LUCENE_9;
+
+}
diff --git a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java
index 75d402b43..a4c56cdd7 100644
--- a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java
+++ b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/AnalyzeHealthCheck.java
@@ -18,6 +18,7 @@ import java.util.List;
import org.apache.couchdb.nouveau.api.AnalyzeRequest;
import org.apache.couchdb.nouveau.api.AnalyzeResponse;
+import static org.apache.couchdb.nouveau.api.LuceneVersion.*;
import org.apache.couchdb.nouveau.resources.AnalyzeResource;
import com.codahale.metrics.health.HealthCheck;
@@ -31,7 +32,7 @@ public class AnalyzeHealthCheck extends HealthCheck {
@Override
protected Result check() throws Exception {
- final AnalyzeRequest request = new AnalyzeRequest("standard", "hello there");
+ final AnalyzeRequest request = new AnalyzeRequest(LUCENE_9, "standard", "hello there");
final AnalyzeResponse response = analyzeResource.analyzeText(request);
final List<String> expected = Arrays.asList("hello", "there");
final List<String> actual = response.getTokens();
diff --git a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexManagerHealthCheck.java b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexManagerHealthCheck.java
index 98ac5988e..b2653db38 100644
--- a/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexManagerHealthCheck.java
+++ b/java/nouveau/src/main/java/org/apache/couchdb/nouveau/health/IndexManagerHealthCheck.java
@@ -16,6 +16,7 @@ package org.apache.couchdb.nouveau.health;
import java.io.IOException;
import org.apache.couchdb.nouveau.api.IndexDefinition;
+import static org.apache.couchdb.nouveau.api.LuceneVersion.*;
import org.apache.couchdb.nouveau.core.IndexManager;
import org.apache.couchdb.nouveau.core.IndexManager.Index;
import com.codahale.metrics.health.HealthCheck;
@@ -40,7 +41,7 @@ public class IndexManagerHealthCheck extends HealthCheck {
// Ignored, index might not exist yet.
}
- indexManager.create(name, new IndexDefinition("standard", null));
+ indexManager.create(name, new IndexDefinition(LUCENE_9, "standard", null));
final Index index = indexManager.acquire(name);
try {
final IndexWriter writer = index.getWriter();
diff --git a/java/nouveau/src/test/java/org/apache/couchdb/nouveau/IntegrationTest.java b/java/nouveau/src/test/java/org/apache/couchdb/nouveau/IntegrationTest.java
index c353fe7da..8b2d7029a 100644
--- a/java/nouveau/src/test/java/org/apache/couchdb/nouveau/IntegrationTest.java
+++ b/java/nouveau/src/test/java/org/apache/couchdb/nouveau/IntegrationTest.java
@@ -24,6 +24,7 @@ import javax.ws.rs.core.Response;
import org.apache.couchdb.nouveau.api.DocumentUpdateRequest;
import org.apache.couchdb.nouveau.api.IndexDefinition;
+import static org.apache.couchdb.nouveau.api.LuceneVersion.*;
import org.apache.couchdb.nouveau.api.SearchRequest;
import org.apache.couchdb.nouveau.api.SearchResults;
@@ -56,7 +57,7 @@ public class IntegrationTest {
public void indexTest() {
final String url = "http://localhost:" + APP.getLocalPort();
final String indexName = "foo";
- final IndexDefinition indexDefinition = new IndexDefinition("standard", null);
+ final IndexDefinition indexDefinition = new IndexDefinition(LUCENE_9, "standard", null);
// Clean up.
Response response =
diff --git a/java/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java b/java/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java
index fdd6a368e..64081d5c0 100644
--- a/java/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java
+++ b/java/nouveau/src/test/java/org/apache/couchdb/nouveau/core/IndexManagerTest.java
@@ -16,6 +16,8 @@ package org.apache.couchdb.nouveau.core;
import java.nio.file.Path;
import org.apache.couchdb.nouveau.api.IndexDefinition;
+import static org.apache.couchdb.nouveau.api.LuceneVersion.*;
+
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.AfterEach;
@@ -54,7 +56,7 @@ public class IndexManagerTest {
@Test
public void testCreate() throws Exception {
- final IndexDefinition def = new IndexDefinition("standard", null);
+ final IndexDefinition def = new IndexDefinition(LUCENE_9, "standard", null);
manager.create("foo", def);
}
diff --git a/src/nouveau/include/nouveau.hrl b/src/nouveau/include/nouveau.hrl
index e50cd45d3..83865b312 100644
--- a/src/nouveau/include/nouveau.hrl
+++ b/src/nouveau/include/nouveau.hrl
@@ -14,6 +14,7 @@
-record(index, {
dbname,
ddoc_id,
+ lucene_version,
default_analyzer,
field_analyzers,
def,
diff --git a/src/nouveau/src/nouveau_api.erl b/src/nouveau/src/nouveau_api.erl
index 55e294ee6..a3527ff59 100644
--- a/src/nouveau/src/nouveau_api.erl
+++ b/src/nouveau/src/nouveau_api.erl
@@ -32,7 +32,7 @@
analyze(Text, Analyzer) when
is_binary(Text), is_binary(Analyzer)
->
- ReqBody = {[{<<"text">>, Text}, {<<"analyzer">>, Analyzer}]},
+ ReqBody = {[{<<"lucene_version">>, <<"LUCENE_9">>}, {<<"text">>, Text}, {<<"analyzer">>, Analyzer}]},
Resp = send_if_enabled(
nouveau_util:nouveau_url() ++ "/analyze", [?JSON_CONTENT_TYPE], post, jiffy:encode(ReqBody)
),
diff --git a/src/nouveau/src/nouveau_index_updater.erl b/src/nouveau/src/nouveau_index_updater.erl
index b56ee9155..184b978d7 100644
--- a/src/nouveau/src/nouveau_index_updater.erl
+++ b/src/nouveau/src/nouveau_index_updater.erl
@@ -128,6 +128,7 @@ get_index_seq(#index{} = Index) ->
index_definition(#index{} = Index) ->
#{
+ <<"lucene_version">> => Index#index.lucene_version,
<<"default_analyzer">> => Index#index.default_analyzer,
<<"field_analyzers">> => Index#index.field_analyzers
}.
diff --git a/src/nouveau/src/nouveau_util.erl b/src/nouveau/src/nouveau_util.erl
index 92bbc0113..9408b3ba1 100644
--- a/src/nouveau/src/nouveau_util.erl
+++ b/src/nouveau/src/nouveau_util.erl
@@ -63,6 +63,10 @@ design_doc_to_index(DbName, #doc{id = Id, body = {Fields}}, IndexName) ->
false ->
{error, {not_found, <<IndexName/binary, " not found.">>}};
{IndexName, {Index}} ->
+ DefaultLuceneVersion = config:get("nouveau", "default_lucene_version", "LUCENE_9"),
+ LuceneVersion = couch_util:get_value(
+ <<"lucene_version">>, Index, ?l2b(DefaultLuceneVersion)
+ ),
DefaultAnalyzer = couch_util:get_value(<<"default_analyzer">>, Index, <<"standard">>),
FieldAnalyzers = couch_util:get_value(<<"field_analyzers">>, Index, #{}),
case couch_util:get_value(<<"index">>, Index) of
@@ -71,13 +75,17 @@ design_doc_to_index(DbName, #doc{id = Id, body = {Fields}}, IndexName) ->
Def ->
Sig = ?l2b(
couch_util:to_hex(
- couch_hash:md5_hash(
- term_to_binary({DefaultAnalyzer, FieldAnalyzers, Def})
+ crypto:hash(
+ sha256,
+ term_to_binary(
+ {LuceneVersion, DefaultAnalyzer, FieldAnalyzers, Def}
+ )
)
)
),
{ok, #index{
dbname = DbName,
+ lucene_version = LuceneVersion,
default_analyzer = DefaultAnalyzer,
field_analyzers = FieldAnalyzers,
ddoc_id = Id,