/* * Copyright (c) 2009 Andrejs Jermakovics. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Andrejs Jermakovics - initial implementation */ package it.unibz.instasearch.indexing.querying; import it.unibz.instasearch.indexing.Field; import java.util.HashMap; import org.apache.lucene.index.Term; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; /** * Converts field aliases to actual field names */ public class FieldAliasConverter extends QueryVisitor { private static HashMap<String, Field> aliases = new HashMap<String, Field>(); static { aliases.put("project", Field.PROJ); aliases.put("filetype", Field.EXT); aliases.put("type", Field.EXT); aliases.put("workingset", Field.WS); aliases.put("age", Field.MODIFIED); aliases.put("folder", Field.DIR); } /** * */ public FieldAliasConverter() { } @Override public Query visit(TermQuery termQuery, Field termField) { Term t = termQuery.getTerm(); if( termField == null && aliases.containsKey(t.field()) ) { Field field = aliases.get(t.field()); Term newTerm = field.createTerm(t.text()); TermQuery newTermQuery = new TermQuery(newTerm); return newTermQuery; } return super.visit(termQuery, termField); } @Override public Query visit(PrefixQuery prefixQuery, Field termField) { Term t = prefixQuery.getPrefix(); if( termField == null && aliases.containsKey(t.field()) ) { Field field = aliases.get(t.field()); Term newTerm = field.createTerm(t.text()); PrefixQuery newTermQuery = new PrefixQuery(newTerm); return newTermQuery; } return super.visit(prefixQuery, termField); } @Override public Query visit(WildcardQuery wildcardQuery, Field termField) { Term t = wildcardQuery.getTerm(); if( termField == null && aliases.containsKey(t.field()) ) { Field field = aliases.get(t.field()); Term newTerm = field.createTerm(t.text()); WildcardQuery newTermQuery = new WildcardQuery(newTerm); return newTermQuery; } return super.visit(wildcardQuery, termField); } }