+++ /dev/null
-package org.apache.lucene.xmlparser;
-
-import java.io.InputStream;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.xmlparser.builders.*;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Assembles a QueryBuilder which uses only core Lucene Query objects
- *
- */
-public class CoreParser implements QueryBuilder
-{
-
- protected Analyzer analyzer;
- protected QueryParser parser;
- protected QueryBuilderFactory queryFactory;
- protected FilterBuilderFactory filterFactory;
- //Controls the max size of the LRU cache used for QueryFilter objects parsed.
- public static int maxNumCachedFilters=20;
-
-
- /**
- * Construct an XML parser that uses a single instance QueryParser for handling
- * UserQuery tags - all parse operations are synchronised on this parser
- * @param analyzer
- * @param parser A QueryParser which will be synchronized on during parse calls.
- */
- public CoreParser(Analyzer analyzer, QueryParser parser)
- {
- this(null,analyzer,parser);
- }
-
- /**
- * Constructs an XML parser that creates a QueryParser for each UserQuery request.
- * @param defaultField The default field name used by QueryParsers constructed for UserQuery tags
- * @param analyzer
- */
- public CoreParser(String defaultField, Analyzer analyzer)
- {
- this(defaultField,analyzer,null);
- }
-
- protected CoreParser(String defaultField,Analyzer analyzer, QueryParser parser)
- {
- this.analyzer=analyzer;
- this.parser=parser;
- filterFactory = new FilterBuilderFactory();
- filterFactory.addBuilder("RangeFilter",new RangeFilterBuilder());
- filterFactory.addBuilder("NumericRangeFilter",new NumericRangeFilterBuilder());
-
- queryFactory = new QueryBuilderFactory();
- queryFactory.addBuilder("TermQuery",new TermQueryBuilder());
- queryFactory.addBuilder("TermsQuery",new TermsQueryBuilder(analyzer));
- queryFactory.addBuilder("MatchAllDocsQuery",new MatchAllDocsQueryBuilder());
- queryFactory.addBuilder("BooleanQuery",new BooleanQueryBuilder(queryFactory));
- queryFactory.addBuilder("NumericRangeQuery",new NumericRangeQueryBuilder());
- if(parser!=null)
- {
- queryFactory.addBuilder("UserQuery",new UserInputQueryBuilder(parser));
- }
- else
- {
- queryFactory.addBuilder("UserQuery",new UserInputQueryBuilder(defaultField,analyzer));
- }
- queryFactory.addBuilder("FilteredQuery",new FilteredQueryBuilder(filterFactory,queryFactory));
- queryFactory.addBuilder("ConstantScoreQuery",new ConstantScoreQueryBuilder(filterFactory));
-
- filterFactory.addBuilder("CachedFilter",new CachedFilterBuilder(queryFactory,
- filterFactory, maxNumCachedFilters));
-
-
- SpanQueryBuilderFactory sqof=new SpanQueryBuilderFactory();
-
- SpanNearBuilder snb=new SpanNearBuilder(sqof);
- sqof.addBuilder("SpanNear",snb);
- queryFactory.addBuilder("SpanNear",snb);
-
- BoostingTermBuilder btb=new BoostingTermBuilder();
- sqof.addBuilder("BoostingTermQuery",btb);
- queryFactory.addBuilder("BoostingTermQuery",btb);
-
- SpanTermBuilder snt=new SpanTermBuilder();
- sqof.addBuilder("SpanTerm",snt);
- queryFactory.addBuilder("SpanTerm",snt);
-
- SpanOrBuilder sot=new SpanOrBuilder(sqof);
- sqof.addBuilder("SpanOr",sot);
- queryFactory.addBuilder("SpanOr",sot);
-
- SpanOrTermsBuilder sots=new SpanOrTermsBuilder(analyzer);
- sqof.addBuilder("SpanOrTerms",sots);
- queryFactory.addBuilder("SpanOrTerms",sots);
-
- SpanFirstBuilder sft=new SpanFirstBuilder(sqof);
- sqof.addBuilder("SpanFirst",sft);
- queryFactory.addBuilder("SpanFirst",sft);
-
- SpanNotBuilder snot=new SpanNotBuilder(sqof);
- sqof.addBuilder("SpanNot",snot);
- queryFactory.addBuilder("SpanNot",snot);
- }
-
- public Query parse(InputStream xmlStream) throws ParserException
- {
- return getQuery(parseXML(xmlStream).getDocumentElement());
- }
-
- public void addQueryBuilder(String nodeName,QueryBuilder builder)
- {
- queryFactory.addBuilder(nodeName,builder);
- }
- public void addFilterBuilder(String nodeName,FilterBuilder builder)
- {
- filterFactory.addBuilder(nodeName,builder);
- }
-
- private static Document parseXML(InputStream pXmlFile) throws ParserException
- {
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db = null;
- try
- {
- db = dbf.newDocumentBuilder();
- }
- catch (Exception se)
- {
- throw new ParserException("XML Parser configuration error", se);
- }
- org.w3c.dom.Document doc = null;
- try
- {
- doc = db.parse(pXmlFile);
- }
- catch (Exception se)
- {
- throw new ParserException("Error parsing XML stream:" + se, se);
- }
- return doc;
- }
-
-
- public Query getQuery(Element e) throws ParserException
- {
- return queryFactory.getQuery(e);
- }
-}