otis 2004/08/23 16:07:42 Modified: src/java/org/apache/lucene/queryParser MultiFieldQueryParser.java Log: - Added 2 new parse methods that take arrays of query strings. Submited by Andraz Skoric ([EMAIL PROTECTED]) back in April 2004 Revision Changes Path 1.5 +89 -1 jakarta-lucene/src/java/org/apache/lucene/queryParser/MultiFieldQueryParser.java Index: MultiFieldQueryParser.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/MultiFieldQueryParser.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- MultiFieldQueryParser.java 29 Mar 2004 22:48:03 -0000 1.4 +++ MultiFieldQueryParser.java 23 Aug 2004 23:07:41 -0000 1.5 @@ -82,6 +82,37 @@ /** * <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) + // TODO Exception handling + throw new ParseException("queries.length != fields.length"); + 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. @@ -118,6 +149,63 @@ 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) + // TODO Exception handling + throw new ParseException("queries.length != fields.length"); + 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) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]