view src/goodjava/queryparser/SynonymParser.java @ 1445:f6075d7a36f2

better range query
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 05 Feb 2020 18:06:26 -0700
parents 27efb1fcbcb5
children
line wrap: on
line source

package goodjava.queryparser;

import java.util.Map;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.SortField;
import goodjava.parser.ParseException;


public class SynonymParser implements FieldParser {
	private final FieldParser fp;
	private final Map<String,String[]> synonymMap;

	public SynonymParser(FieldParser fp,Map<String,String[]> synonymMap) {
		this.fp = fp;
		this.synonymMap = synonymMap;
	}

	protected String[] getSynonyms(String query) {
		return synonymMap.get(query);
	}

	public Query getQuery(SaneQueryParser qp,String field,String query) throws ParseException {
		String[] synonyms = getSynonyms(query);
		if( synonyms == null )
			return fp.getQuery(qp,field,query);
		BooleanQuery bq = new BooleanQuery();
		bq.add( fp.getQuery(qp,field,query), BooleanClause.Occur.SHOULD );
		for( String s : synonyms ) {
			bq.add( fp.getQuery(qp,field,s), BooleanClause.Occur.SHOULD );
		}
		return bq;
	}

	public Query getRangeQuery(SaneQueryParser qp,String field,String minQuery,String maxQuery,boolean includeMin,boolean includeMax) throws ParseException {
		return fp.getRangeQuery(qp,field,minQuery,maxQuery,includeMin,includeMax);
	}

	public SortField getSortField(SaneQueryParser qp,String field,boolean reverse) throws ParseException {
		return fp.getSortField(qp,field,reverse);
	}
}