diff options
author | Robert Newson <rnewson@apache.org> | 2022-12-22 15:05:28 +0000 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2022-12-22 15:56:09 +0000 |
commit | a677cb4e1dc8f3417bea9e0dbbeb69be368f66e1 (patch) | |
tree | 732278989ed64898a1df53f707c14170016f5306 | |
parent | c64f9d32c965aa5f36cf23b7e523b91eb95eb6e6 (diff) | |
download | couchdb-a677cb4e1dc8f3417bea9e0dbbeb69be368f66e1.tar.gz |
Make lucene version of index part of definition and signature
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, |