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