1313
1414package org .apache .couchdb .nouveau .api ;
1515
16+ import com .fasterxml .jackson .annotation .JsonIgnore ;
1617import com .fasterxml .jackson .annotation .JsonProperty ;
1718import com .fasterxml .jackson .databind .PropertyNamingStrategies ;
1819import com .fasterxml .jackson .databind .annotation .JsonNaming ;
20+ import jakarta .validation .constraints .Max ;
21+ import jakarta .validation .constraints .Min ;
1922import jakarta .validation .constraints .NotEmpty ;
2023import java .util .Map ;
2124
2225@ JsonNaming (PropertyNamingStrategies .SnakeCaseStrategy .class )
2326public class IndexDefinition {
2427
28+ public static final int LEGACY_LUCENE_VERSION = 9 ;
29+ public static final int LATEST_LUCENE_VERSION = 10 ;
30+
31+ @ Min (LEGACY_LUCENE_VERSION )
32+ @ Max (LATEST_LUCENE_VERSION )
33+ private int luceneVersion = LEGACY_LUCENE_VERSION ; // Legacy version if not set.
34+
2535 @ NotEmpty
2636 private String defaultAnalyzer ;
2737
@@ -31,11 +41,27 @@ public IndexDefinition() {
3141 // Jackson deserialization
3242 }
3343
34- public IndexDefinition (final String defaultAnalyzer , final Map <String , String > fieldAnalyzers ) {
44+ public IndexDefinition (
45+ final int luceneVersion , final String defaultAnalyzer , final Map <String , String > fieldAnalyzers ) {
46+ this .luceneVersion = luceneVersion ;
3547 this .defaultAnalyzer = defaultAnalyzer ;
3648 this .fieldAnalyzers = fieldAnalyzers ;
3749 }
3850
51+ @ JsonProperty
52+ public int getLuceneVersion () {
53+ return luceneVersion ;
54+ }
55+
56+ @ JsonIgnore
57+ public boolean isLatestVersion () {
58+ return luceneVersion == LATEST_LUCENE_VERSION ;
59+ }
60+
61+ public void setLuceneVersion (int luceneVersion ) {
62+ this .luceneVersion = luceneVersion ;
63+ }
64+
3965 @ JsonProperty
4066 public String getDefaultAnalyzer () {
4167 return defaultAnalyzer ;
@@ -62,6 +88,7 @@ public boolean hasFieldAnalyzers() {
6288 public int hashCode () {
6389 final int prime = 31 ;
6490 int result = 1 ;
91+ result = prime * result + luceneVersion ;
6592 result = prime * result + ((defaultAnalyzer == null ) ? 0 : defaultAnalyzer .hashCode ());
6693 result = prime * result + ((fieldAnalyzers == null ) ? 0 : fieldAnalyzers .hashCode ());
6794 return result ;
@@ -73,6 +100,7 @@ public boolean equals(Object obj) {
73100 if (obj == null ) return false ;
74101 if (getClass () != obj .getClass ()) return false ;
75102 IndexDefinition other = (IndexDefinition ) obj ;
103+ if (luceneVersion != other .luceneVersion ) return false ;
76104 if (defaultAnalyzer == null ) {
77105 if (other .defaultAnalyzer != null ) return false ;
78106 } else if (!defaultAnalyzer .equals (other .defaultAnalyzer )) return false ;
@@ -84,6 +112,7 @@ public boolean equals(Object obj) {
84112
85113 @ Override
86114 public String toString () {
87- return "IndexDefinition [defaultAnalyzer=" + defaultAnalyzer + ", fieldAnalyzers=" + fieldAnalyzers + "]" ;
115+ return "IndexDefinition [luceneVersion=" + luceneVersion + ", defaultAnalyzer=" + defaultAnalyzer
116+ + ", fieldAnalyzers=" + fieldAnalyzers + "]" ;
88117 }
89118}
0 commit comments