You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Andraz Skoric @ Medius" <an...@medius.si> on 2004/04/05 10:25:29 UTC
2 new methods in MultiFieldQueryParser
Hi,
while using Lucene I implemented 2 new methods which i found useful
(while implementing advanced search (find anything, find all)). If u would
like to use it here is a source file.
Lp, Andraz
Re: 2 new methods in MultiFieldQueryParser
Posted by Otis Gospodnetic <ot...@yahoo.com>.
My email reader munges inlined text files like this one (line wraps,
etc.).
Would it be possible for you to:
1) create a diff (cvs diff -u ....)
2) attach it to a new entry in Bugzilla
(http://issues.apache.org/bugzilla/enter_bug.cgi?product=Lucene)
OR
3) zip the cvs diff and attach it to email
Thanks,
Otis
--- "Andraz Skoric @ Medius" <an...@medius.si> wrote:
> Hi,
>
> while using Lucene I implemented 2 new methods which i found useful
> (while implementing advanced search (find anything, find all)). If u
> would
> like to use it here is a source file.
>
> Lp, Andraz
>
> > package org.apache.lucene.queryParser;
>
> /*
> ====================================================================
> * The Apache Software License, Version 1.1
> *
> * Copyright (c) 2001 The Apache Software Foundation. All rights
> * reserved.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> *
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> *
> * 2. Redistributions in binary form must reproduce the above
> copyright
> * notice, this list of conditions and the following disclaimer in
> * the documentation and/or other materials provided with the
> * distribution.
> *
> * 3. The end-user documentation included with the redistribution,
> * if any, must include the following acknowledgment:
> * "This product includes software developed by the
> * Apache Software Foundation (http://www.apache.org/)."
> * Alternately, this acknowledgment may appear in the software
> itself,
> * if and wherever such third-party acknowledgments normally
> appear.
> *
> * 4. The names "Apache" and "Apache Software Foundation"
> * must not be used to endorse or promote products
> * derived from this software without prior written permission.
> For
> * written permission, please contact apache@apache.org.
> *
> * 5. Products derived from this software may not be called "Apache",
> * nor may "Apache" appear in their name, without
> * prior written permission of the Apache Software Foundation.
> *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
> AND
> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> ====================================================================
> *
> * This software consists of voluntary contributions made by many
> * individuals on behalf of the Apache Software Foundation. For more
> * information on the Apache Software Foundation, please see
> * <http://www.apache.org/>.
> */
>
> import org.apache.lucene.analysis.Analyzer;
> import org.apache.lucene.queryParser.CharStream;
> import org.apache.lucene.queryParser.ParseException;
> import org.apache.lucene.queryParser.QueryParser;
> import org.apache.lucene.queryParser.QueryParserTokenManager;
> import org.apache.lucene.search.BooleanQuery;
> import org.apache.lucene.search.Query;
>
> /**
> * A QueryParser which constructs queries to search multiple fields.
> *
> * @author <a href="mailto:kelvin@relevanz.com">Kelvin Tan</a>
> * @version $Revision: 1.3 $
> */
> public class MultiFieldQueryParser extends QueryParser
> {
> public static final int NORMAL_FIELD = 0;
> public static final int REQUIRED_FIELD = 1;
> public static final int PROHIBITED_FIELD = 2;
>
> public MultiFieldQueryParser(QueryParserTokenManager tm)
> {
> super(tm);
> }
>
> public MultiFieldQueryParser(CharStream stream)
> {
> super(stream);
> }
>
> public MultiFieldQueryParser(String f, Analyzer a)
> {
> super(f, a);
> }
>
> /**
> * <p>
> * Parses a query which searches on the fields specified.
> * <p>
> * If x fields are specified, this effectively constructs:
> * <pre>
> * <code>
> * (field1:query) (field2:query) (field3:query)...(fieldx:query)
> * </code>
> * </pre>
> *
> * @param query Query string to parse
> * @param fields Fields to search on
> * @param analyzer Analyzer to use
> * @throws ParseException if query parsing fails
> * @throws TokenMgrError if query parsing fails
> */
> public static Query parse(String query, String[] fields, Analyzer
> analyzer)
> throws ParseException
> {
> BooleanQuery bQuery = new BooleanQuery();
> for (int i = 0; i < fields.length; i++)
> {
> Query q = parse(query, fields[i], analyzer);
> bQuery.add(q, false, false);
> }
> return bQuery;
> }
>
> /**
> * <p>
> * Parses a query which searches on the fields specified.
> * <p>
> * If x fields are specified, this effectively constructs:
> * <pre>
> * <code>
> * (field1:query1) (field2:query2)
> (field3:query3)...(fieldx:queryx)
> * </code>
> * </pre>
> * @param queries Queries strings to parse
> * @param fields Fields to search on
> * @param analyzer Analyzer to use
> * @throws ParseException if query parsing fails
> * @throws TokenMgrError if query parsing fails
> */
> public static Query parse(String[] queries, String[] fields,
> Analyzer analyzer) throws ParseException
> {
> if (queries.length != fields.length) throw new
> ParseException("queries.length != fields.length"); // TODO Exception
> handling
> BooleanQuery bQuery = new BooleanQuery();
> for (int i = 0; i < fields.length; i++)
> {
> Query q = parse(queries[i], fields[i], analyzer);
> bQuery.add(q, false, false);
> }
> return bQuery;
> }
>
> /**
> * <p>
> * Parses a query, searching on the fields specified.
> * Use this if you need to specify certain fields as required,
> * and others as prohibited.
> * <p><pre>
> * Usage:
> * <code>
> * String[] fields = {"filename", "contents", "description"};
> * int[] flags = {MultiFieldQueryParser.NORMAL FIELD,
> * MultiFieldQueryParser.REQUIRED FIELD,
> * MultiFieldQueryParser.PROHIBITED FIELD,};
> * parse(query, fields, flags, analyzer);
> * </code>
> * </pre>
> *<p>
> * The code above would construct a query:
> * <pre>
> * <code>
> * (filename:query1) +(contents:query2) -(description:query3)
> * </code>
> * </pre>
> *
> * @param query Query string to parse
> * @param fields Fields to search on
> * @param flags Flags describing the fields
> * @param analyzer Analyzer to use
> * @throws ParseException if query parsing fails
> * @throws TokenMgrError if query parsing fails
> */
> public static Query parse(String query, String[] fields, int[]
> flags,
> Analyzer analyzer)
> throws ParseException
> {
> BooleanQuery bQuery = new BooleanQuery();
> for (int i = 0; i < fields.length; i++)
> {
> Query q = parse(query, fields[i], analyzer);
> int flag = flags[i];
> switch (flag)
> {
> case REQUIRED_FIELD:
> bQuery.add(q, true, false);
> break;
> case PROHIBITED_FIELD:
> bQuery.add(q, false, true);
> break;
> default:
> bQuery.add(q, false, false);
> break;
> }
> }
> return bQuery;
> }
>
> /**
> * <p>
> * Parses a query, searching on the fields specified.
> * Use this if you need to specify certain fields as required,
> * and others as prohibited.
> * <p><pre>
> * Usage:
> * <code>
> * String[] fields = {"filename", "contents", "description"};
> * int[] flags = {MultiFieldQueryParser.NORMAL FIELD,
> * MultiFieldQueryParser.REQUIRED FIELD,
> * MultiFieldQueryParser.PROHIBITED FIELD,};
> * parse(query, fields, flags, analyzer);
> * </code>
> * </pre>
> *<p>
> * The code above would construct a query:
> * <pre>
> * <code>
> * (filename:query1) +(contents:query2) -(description:query3)
> * </code>
> * </pre>
> *
> * @param queries Queries string to parse
> * @param fields Fields to search on
> * @param flags Flags describing the fields
> * @param analyzer Analyzer to use
> * @throws ParseException if query parsing fails
> * @throws TokenMgrError if query parsing fails
> */
> public static Query parse(String[] queries, String[] fields,
> int[] flags, Analyzer analyzer) throws ParseException
> {
> if (queries.length != fields.length) throw new
> ParseException("queries.length != fields.length"); // TODO Exception
> handling
> BooleanQuery bQuery = new BooleanQuery();
> for (int i = 0; i < fields.length; i++)
> {
> Query q = parse(queries[i], fields[i], analyzer);
> int flag = flags[i];
> switch (flag)
> {
> case REQUIRED_FIELD:
> bQuery.add(q, true, false);
> break;
> case PROHIBITED_FIELD:
> bQuery.add(q, false, true);
> break;
> default:
> bQuery.add(q, false, false);
> break;
> }
> }
> return bQuery;
> }
> }
>
> >
---------------------------------------------------------------------
> To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: lucene-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org