diff options
Diffstat (limited to 'nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java')
-rw-r--r-- | nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java | 143 |
1 files changed, 143 insertions, 0 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 new file mode 100644 index 000000000..ca6834f5e --- /dev/null +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9AnalyzerFactory.java @@ -0,0 +1,143 @@ +// +// 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.lucene9; + +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; +import org.apache.lucene.analysis.bg.BulgarianAnalyzer; +import org.apache.lucene.analysis.ca.CatalanAnalyzer; +import org.apache.lucene.analysis.cjk.CJKAnalyzer; +import org.apache.lucene.analysis.classic.ClassicAnalyzer; +import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; +import org.apache.lucene.analysis.core.KeywordAnalyzer; +import org.apache.lucene.analysis.core.SimpleAnalyzer; +import org.apache.lucene.analysis.core.WhitespaceAnalyzer; +import org.apache.lucene.analysis.cz.CzechAnalyzer; +import org.apache.lucene.analysis.da.DanishAnalyzer; +import org.apache.lucene.analysis.de.GermanAnalyzer; +import org.apache.lucene.analysis.email.UAX29URLEmailAnalyzer; +import org.apache.lucene.analysis.en.EnglishAnalyzer; +import org.apache.lucene.analysis.es.SpanishAnalyzer; +import org.apache.lucene.analysis.eu.BasqueAnalyzer; +import org.apache.lucene.analysis.fa.PersianAnalyzer; +import org.apache.lucene.analysis.fi.FinnishAnalyzer; +import org.apache.lucene.analysis.fr.FrenchAnalyzer; +import org.apache.lucene.analysis.ga.IrishAnalyzer; +import org.apache.lucene.analysis.gl.GalicianAnalyzer; +import org.apache.lucene.analysis.hi.HindiAnalyzer; +import org.apache.lucene.analysis.hu.HungarianAnalyzer; +import org.apache.lucene.analysis.hy.ArmenianAnalyzer; +import org.apache.lucene.analysis.id.IndonesianAnalyzer; +import org.apache.lucene.analysis.it.ItalianAnalyzer; +import org.apache.lucene.analysis.ja.JapaneseAnalyzer; +import org.apache.lucene.analysis.lv.LatvianAnalyzer; +import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper; +import org.apache.lucene.analysis.nl.DutchAnalyzer; +import org.apache.lucene.analysis.no.NorwegianAnalyzer; +import org.apache.lucene.analysis.pl.PolishAnalyzer; +import org.apache.lucene.analysis.pt.PortugueseAnalyzer; +import org.apache.lucene.analysis.ro.RomanianAnalyzer; +import org.apache.lucene.analysis.ru.RussianAnalyzer; +import org.apache.lucene.analysis.standard.StandardAnalyzer; +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() { + } + + public static Analyzer fromDefinition(final IndexDefinition indexDefinition) { + final Analyzer defaultAnalyzer = newAnalyzer(indexDefinition.getDefaultAnalyzer()); + if (!indexDefinition.hasFieldAnalyzers()) { + return defaultAnalyzer; + } + final Map<String, Analyzer> fieldAnalyzers = new HashMap<String, Analyzer>(); + 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(() -> new ArabicAnalyzer()), + armenian(() -> new ArmenianAnalyzer()), + basque(() -> new BasqueAnalyzer()), + bulgarian(() -> new BulgarianAnalyzer()), + catalan(() -> new CatalanAnalyzer()), + chinese(() -> new SmartChineseAnalyzer()), + cjk(() -> new CJKAnalyzer()), + classic(() -> new ClassicAnalyzer()), + czech(() -> new CzechAnalyzer()), + danish(() -> new DanishAnalyzer()), + dutch(() -> new DutchAnalyzer()), + email(() -> new UAX29URLEmailAnalyzer()), + english(() -> new EnglishAnalyzer()), + finnish(() -> new FinnishAnalyzer()), + french(() -> new FrenchAnalyzer()), + galician(() -> new GalicianAnalyzer()), + german(() -> new GermanAnalyzer()), + hindi(() -> new HindiAnalyzer()), + hungarian(() -> new HungarianAnalyzer()), + indonesian(() -> new IndonesianAnalyzer()), + irish(() -> new IrishAnalyzer()), + italian(() -> new ItalianAnalyzer()), + japanese(() -> new JapaneseAnalyzer()), + keyword(() -> new KeywordAnalyzer()), + latvian(() -> new LatvianAnalyzer()), + norwegian(() -> new NorwegianAnalyzer()), + persian(() -> new PersianAnalyzer()), + polish(() -> new PolishAnalyzer()), + portugese(() -> new PortugueseAnalyzer()), + romanian(() -> new RomanianAnalyzer()), + russian(() -> new RussianAnalyzer()), + simple(() -> new SimpleAnalyzer()), + simple_asciifolding(() -> new SimpleAsciiFoldingAnalyzer()), + spanish(() -> new SpanishAnalyzer()), + standard(() -> new StandardAnalyzer()), + swedish(() -> new SwedishAnalyzer()), + thai(() -> new ThaiAnalyzer()), + turkish(() -> new TurkishAnalyzer()), + whitespace(() -> new WhitespaceAnalyzer()); + + private final Supplier<? extends Analyzer> supplier; + + private KnownAnalyzer(final Supplier<? extends Analyzer> supplier) { + this.supplier = supplier; + } + + private Analyzer newInstance() { + return supplier.get(); + } + } + + public static Analyzer newAnalyzer(final String name) { + try { + return KnownAnalyzer.valueOf(name).newInstance(); + } catch (IllegalArgumentException e) { + throw new WebApplicationException(name + " is not a valid analyzer name", Status.BAD_REQUEST); + } + } + +} |