Return-Path: Delivered-To: apmail-jakarta-lucene-user-archive@www.apache.org Received: (qmail 3419 invoked from network); 10 Aug 2004 13:08:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 10 Aug 2004 13:08:18 -0000 Received: (qmail 95290 invoked by uid 500); 10 Aug 2004 13:08:07 -0000 Delivered-To: apmail-jakarta-lucene-user-archive@jakarta.apache.org Received: (qmail 95184 invoked by uid 500); 10 Aug 2004 13:08:06 -0000 Mailing-List: contact lucene-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Lucene Users List" Reply-To: "Lucene Users List" Delivered-To: mailing list lucene-user@jakarta.apache.org Received: (qmail 95168 invoked by uid 99); 10 Aug 2004 13:08:06 -0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received: from [213.165.64.20] (HELO mail.gmx.net) (213.165.64.20) by apache.org (qpsmtpd/0.27.1) with SMTP; Tue, 10 Aug 2004 06:08:02 -0700 Received: (qmail 24632 invoked by uid 65534); 10 Aug 2004 13:07:59 -0000 Received: from tpluempe.cs.ucl.ac.uk (EHLO [128.16.11.248]) (128.16.11.248) by mail.gmx.net (mp012) with SMTP; 10 Aug 2004 15:07:59 +0200 X-Authenticated: #1165889 Subject: Re: search for and condition From: Thomas =?ISO-8859-1?Q?Pl=FCmpe?= To: Lucene Users List In-Reply-To: <00da01c47e06$3f2995d0$0448170a@infact12> References: <00da01c47e06$3f2995d0$0448170a@infact12> Content-Type: text/plain Message-Id: <1092143257.25991.230.camel@tpluempe.cs.ucl.ac.uk> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.6-2.1.92mdk Date: Tue, 10 Aug 2004 14:07:37 +0100 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N > String line="text1 text2"; > Query q = MultiFieldQueryParser.parse(line,fields,analyzer); > Hits hits = searcher.search(q); > > Here search will take "text1 OR text2" Condition > How to make searh "text1 and text2" Condiation MultiFieldQueryParser uses QueryParser.parse which defaults to OR searches. If you just copy MFQP.parse and have it use your own parse method and call parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND); on the QueryParser instance you should be done. (see further below) Note that AND searches done this way only retrieve hits when the "ANDed" terms are in the same field, e.g. football AND computers would produce a hit for documents which have, say, Document 1: hobbies: football, computers but not for documents which have these terms in different fields, say, Document 2: hobbies: football, tennis skills: computers, gardening Thomas /** * This method is taken from the MultiFieldQueryParser, but it uses * its own parse method, which sets the QueryParser to use AND * as a default. */ 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; } /** * Copied from QueryParser, but defaults to AND searches. */ static public Query parse(String query, String field, Analyzer analyzer) throws ParseException { QueryParser parser = new QueryParser(field, analyzer); parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND); return parser.parse(query); } --------------------------------------------------------------------- To unsubscribe, e-mail: lucene-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: lucene-user-help@jakarta.apache.org