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