Return-Path: Delivered-To: apmail-lucene-java-user-archive@www.apache.org Received: (qmail 62860 invoked from network); 10 May 2007 21:07:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 10 May 2007 21:07:36 -0000 Received: (qmail 33708 invoked by uid 500); 10 May 2007 21:07:36 -0000 Delivered-To: apmail-lucene-java-user-archive@lucene.apache.org Received: (qmail 33665 invoked by uid 500); 10 May 2007 21:07:36 -0000 Mailing-List: contact java-user-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-user@lucene.apache.org Delivered-To: mailing list java-user@lucene.apache.org Received: (qmail 33654 invoked by uid 99); 10 May 2007 21:07:36 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 10 May 2007 14:07:36 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: local policy) Received: from [217.12.11.36] (HELO smtp005.mail.ukl.yahoo.com) (217.12.11.36) by apache.org (qpsmtpd/0.29) with SMTP; Thu, 10 May 2007 14:07:28 -0700 Received: (qmail 77041 invoked from network); 10 May 2007 21:07:06 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.co.uk; h=Received:X-YMail-OSG:Message-ID:Date:From:User-Agent:MIME-Version:To:Subject:References:In-Reply-To:Content-Type:Content-Transfer-Encoding; b=fbKQkYGtLscwtOJyw5OjFaDhDzB/2QC+kS/Nvi2WsiXaRUiOwqwYpg0t5EjYmutfZ2TMZ5NRHezsdUPVbRn99tf8/MysbO1TzZinXph1B880E5cQT1k1gBKF6qw57rcDPdW/kRggxVL+RRfGHLCmyZySPdqnHjFAw/i7XGsq4QY= ; Received: from unknown (HELO ?127.0.0.1?) (markharw00d@194.106.34.5 with plain) by smtp005.mail.ukl.yahoo.com with SMTP; 10 May 2007 21:07:06 -0000 X-YMail-OSG: vSrviLkVM1nOM2Ds5mD1frBJSfxisV7oLWAeENd5y_Wz4lyfYVv90tHXjKlvkOaZMG3tTVQzJrjRwihxIsJSkXEZdutjSLN9FOnmncKg9ihqGHrISrdRu9qbdTs- Message-ID: <46438979.5080904@yahoo.co.uk> Date: Thu, 10 May 2007 22:07:05 +0100 From: markharw00d User-Agent: Thunderbird 1.5.0.10 (Windows/20070221) MIME-Version: 1.0 To: java-user@lucene.apache.org Subject: Re: query syntax question References: <4642F55E.1070809@affinitycircles.com> <359a92830705100602v1d77eb14n4c3d912b336da10b@mail.gmail.com> <46436FE2.6050300@affinitycircles.com> <464380BB.2080200@affinitycircles.com> In-Reply-To: <464380BB.2080200@affinitycircles.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org Here's a way to do it using the XML query parser in contrib.... 1) Create this query.xsl file (note use of cached double negative filter) 2) Query as follows: //Setup test data Analyzer analyzer=new WhitespaceAnalyzer(); RAMDirectory rd=new RAMDirectory(); IndexWriter w=new IndexWriter(rd,new WhitespaceAnalyzer(),true); Document d=new Document(); d.add(new Field("contents","foo 1- must not match",Field.Store.YES,Field.Index.TOKENIZED)); d.add(new Field("surname","smith",Field.Store.YES,Field.Index.TOKENIZED)); w.addDocument(d); d=new Document(); d.add(new Field("contents","foo 2- must not match",Field.Store.YES,Field.Index.TOKENIZED)); d.add(new Field("forename","fred",Field.Store.YES,Field.Index.TOKENIZED)); w.addDocument(d); d=new Document(); d.add(new Field("contents","foo 3- must not match",Field.Store.YES,Field.Index.TOKENIZED)); d.add(new Field("forename","fred",Field.Store.YES,Field.Index.TOKENIZED)); d.add(new Field("surname","smith",Field.Store.YES,Field.Index.TOKENIZED)); w.addDocument(d); d=new Document(); d.add(new Field("contents","foo 4- must match",Field.Store.YES,Field.Index.TOKENIZED)); w.addDocument(d); w.close(); IndexSearcher searcher=new IndexSearcher(rd); //one-off setup - store these QueryTemplateManager qtm=new QueryTemplateManager( TestXml.class.getResourceAsStream("query.xsl")); CorePlusExtensionsParser cp = new CorePlusExtensionsParser(analyzer, new QueryParser("contents",analyzer)); //get the user form input String queryString="foo"; Properties userInput=new Properties(); userInput.setProperty("query",queryString); // Transform the user input into a Lucene XML query, then pass to parser Query q=cp.getQuery(qtm.getQueryAsDOM(userInput).getDocumentElement()); Hits h = searcher.search(q); for (int i = 0; i < h.length(); i++) { d=h.doc(i); System.out.println(d.get("contents")); } Cheers Mark --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org For additional commands, e-mail: java-user-help@lucene.apache.org