view lucene/src/luan/modules/lucene/LuanQueryNodeProcessor.java @ 312:d34be4588556

add lucene query parsing git-svn-id: https://luan-java.googlecode.com/svn/trunk@313 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 24 Dec 2014 11:15:27 +0000
parents
children
line wrap: on
line source

package luan.modules.lucene;

import java.util.List;
import org.apache.lucene.queryparser.flexible.core.processors.QueryNodeProcessor;
import org.apache.lucene.queryparser.flexible.core.config.QueryConfigHandler;
import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode;
import org.apache.lucene.queryparser.flexible.core.nodes.FieldQueryNode;
import org.apache.lucene.queryparser.flexible.core.QueryNodeException;


public class LuanQueryNodeProcessor implements QueryNodeProcessor {
	private final LuceneIndex index;
	private final QueryNodeProcessor qnp;

	public LuanQueryNodeProcessor(LuceneIndex index,QueryNodeProcessor qnp) {
		this.index = index;
		this.qnp = qnp;
	}

	public QueryConfigHandler getQueryConfigHandler() {
		return qnp.getQueryConfigHandler();
	}

	public void setQueryConfigHandler(QueryConfigHandler queryConfigHandler) {
		qnp.setQueryConfigHandler(queryConfigHandler);
	}

	public QueryNode process(QueryNode queryTree) throws QueryNodeException {
		fix(queryTree);
//		System.out.println(queryTree);
		return qnp.process(queryTree);
	}

	private void fix(QueryNode queryTree) {
		if( queryTree instanceof FieldQueryNode ) {
			FieldQueryNode fqn = (FieldQueryNode)queryTree;
			CharSequence fldSeq = fqn.getField();
			if( fldSeq == null )
				throw new RuntimeException("missing field for value: "+fqn.getText());
			String fld = fldSeq.toString();
			fld = index.map_field_name(fld);
//			System.out.println("field = "+fld);
			fqn.setField(fld);
		}
		List<QueryNode> list = queryTree.getChildren();
		if( list != null ) {
			for( QueryNode qn : list ) {
				fix(qn);
			}
		}
	}
}