xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/analysis/CompatibleAnalyser.java (revision 5d9f3aa0ca3da3a714233f987fa732f62c0965f6)
1b5840353SAdam Hornáček /*
2b5840353SAdam Hornáček  * CDDL HEADER START
3b5840353SAdam Hornáček  *
4b5840353SAdam Hornáček  * The contents of this file are subject to the terms of the
5b5840353SAdam Hornáček  * Common Development and Distribution License (the "License").
6b5840353SAdam Hornáček  * You may not use this file except in compliance with the License.
7b5840353SAdam Hornáček  *
8b5840353SAdam Hornáček  * See LICENSE.txt included in this distribution for the specific
9b5840353SAdam Hornáček  * language governing permissions and limitations under the License.
10b5840353SAdam Hornáček  *
11b5840353SAdam Hornáček  * When distributing Covered Code, include this CDDL HEADER in each
12b5840353SAdam Hornáček  * file and include the License file at LICENSE.txt.
13b5840353SAdam Hornáček  * If applicable, add the following below this CDDL HEADER, with the
14b5840353SAdam Hornáček  * fields enclosed by brackets "[]" replaced with your own identifying
15b5840353SAdam Hornáček  * information: Portions Copyright [yyyy] [name of copyright owner]
16b5840353SAdam Hornáček  *
17b5840353SAdam Hornáček  * CDDL HEADER END
18b5840353SAdam Hornáček  */
19b5840353SAdam Hornáček 
20b5840353SAdam Hornáček /*
21b5840353SAdam Hornáček  * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
22*2173ed7bSChris Fraire  * Portions Copyright (c) 2017, 2020, Chris Fraire <cfraire@me.com>.
23b5840353SAdam Hornáček  */
249805b761SAdam Hornáček package org.opengrok.indexer.analysis;
25b5840353SAdam Hornáček 
26b5840353SAdam Hornáček import org.apache.lucene.analysis.Analyzer;
27b5840353SAdam Hornáček import org.apache.lucene.analysis.LowerCaseFilter;
28b5840353SAdam Hornáček import org.apache.lucene.analysis.TokenStream;
299805b761SAdam Hornáček import org.opengrok.indexer.analysis.plain.PlainFullTokenizer;
309805b761SAdam Hornáček import org.opengrok.indexer.analysis.plain.PlainSymbolTokenizer;
319805b761SAdam Hornáček import org.opengrok.indexer.search.QueryBuilder;
32b5840353SAdam Hornáček 
33b5840353SAdam Hornáček public class CompatibleAnalyser extends Analyzer {
34b5840353SAdam Hornáček 
CompatibleAnalyser()35b5840353SAdam Hornáček     public CompatibleAnalyser() {
36b5840353SAdam Hornáček         super(Analyzer.PER_FIELD_REUSE_STRATEGY);
37b5840353SAdam Hornáček     }
38b5840353SAdam Hornáček 
39b5840353SAdam Hornáček     @Override
createComponents(String fieldName)40b5840353SAdam Hornáček     protected TokenStreamComponents createComponents(String fieldName) {
41b5840353SAdam Hornáček         switch (fieldName) {
42b5840353SAdam Hornáček             case QueryBuilder.FULL:
43b5840353SAdam Hornáček                 return new TokenStreamComponents(createPlainFullTokenizer());
44b5840353SAdam Hornáček             case QueryBuilder.REFS:
45b5840353SAdam Hornáček                 return new TokenStreamComponents(createPlainSymbolTokenizer());
46b5840353SAdam Hornáček             case QueryBuilder.DEFS:
47b5840353SAdam Hornáček                 return new TokenStreamComponents(createPlainSymbolTokenizer());
48b5840353SAdam Hornáček             case QueryBuilder.PATH:
49b5840353SAdam Hornáček             case QueryBuilder.PROJECT:
50b5840353SAdam Hornáček                 return new TokenStreamComponents(new PathTokenizer());
51b5840353SAdam Hornáček             case QueryBuilder.HIST:
52*2173ed7bSChris Fraire                 try (HistoryAnalyzer historyAnalyzer = new HistoryAnalyzer()) {
53*2173ed7bSChris Fraire                     return historyAnalyzer.createComponents(fieldName);
54*2173ed7bSChris Fraire                 }
55b5840353SAdam Hornáček             default:
56b5840353SAdam Hornáček                 return new TokenStreamComponents(createPlainFullTokenizer());
57b5840353SAdam Hornáček         }
58b5840353SAdam Hornáček     }
59b5840353SAdam Hornáček 
createPlainSymbolTokenizer()60b5840353SAdam Hornáček     private JFlexTokenizer createPlainSymbolTokenizer() {
61b5840353SAdam Hornáček         return new JFlexTokenizer(new PlainSymbolTokenizer(
6257eefa47SKryštof Tulinger                 AbstractAnalyzer.DUMMY_READER));
63b5840353SAdam Hornáček     }
64b5840353SAdam Hornáček 
createPlainFullTokenizer()65b5840353SAdam Hornáček     private JFlexTokenizer createPlainFullTokenizer() {
66b5840353SAdam Hornáček         return new JFlexTokenizer(new PlainFullTokenizer(
6757eefa47SKryštof Tulinger                 AbstractAnalyzer.DUMMY_READER));
68b5840353SAdam Hornáček     }
69b5840353SAdam Hornáček 
70b5840353SAdam Hornáček     @Override
normalize(String fieldName, TokenStream in)71b5840353SAdam Hornáček     protected TokenStream normalize(String fieldName, TokenStream in) {
72b5840353SAdam Hornáček         switch (fieldName) {
73b5840353SAdam Hornáček             case QueryBuilder.DEFS:
74b5840353SAdam Hornáček             case QueryBuilder.REFS:
75b5840353SAdam Hornáček                 return in;
76b5840353SAdam Hornáček             default:
77b5840353SAdam Hornáček                 return new LowerCaseFilter(in);
78b5840353SAdam Hornáček         }
79b5840353SAdam Hornáček     }
80b5840353SAdam Hornáček }
81