package org.apache.lucene.queryparser.flexible.aqp.processors; import org.apache.lucene.queryparser.flexible.core.QueryNodeException; import org.apache.lucene.queryparser.flexible.core.nodes.QueryNode; import org.apache.lucene.queryparser.flexible.aqp.nodes.AqpANTLRNode; import org.apache.lucene.queryparser.flexible.aqp.processors.AqpQProcessor; public class AqpAdsabsFixQPOSITIONProcessor extends AqpQProcessor { @Override public boolean nodeIsWanted(AqpANTLRNode node) { if (node.getTokenLabel().equals("QNORMAL") || node.getTokenLabel().equals("QPHRASE")) { return true; } return false; } public QueryNode createQNode(AqpANTLRNode node) throws QueryNodeException { AqpANTLRNode subChild = ((AqpANTLRNode) node.getChildren().get(0)); String input = subChild.getTokenInput(); // TODO: emit warnings if (node.getTokenLabel().equals("QNORMAL")) { if (input.endsWith("$")) { node.setTokenName("QPOSITION"); node.setTokenLabel("QPOSITION"); } } else { String testInput = input.substring(1, input.length()-1); if (testInput.startsWith("^") || testInput.endsWith("$")) { node.setTokenName("QPOSITION"); node.setTokenLabel("QPOSITION"); subChild.setTokenInput(testInput); } } return node; } }