Return-Path: Delivered-To: apmail-lucene-java-user-archive@www.apache.org Received: (qmail 73210 invoked from network); 14 Apr 2010 11:42:42 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 14 Apr 2010 11:42:42 -0000 Received: (qmail 85485 invoked by uid 500); 14 Apr 2010 11:42:40 -0000 Delivered-To: apmail-lucene-java-user-archive@lucene.apache.org Received: (qmail 85398 invoked by uid 500); 14 Apr 2010 11:42:40 -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 85389 invoked by uid 99); 14 Apr 2010 11:42:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 14 Apr 2010 11:42:40 +0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_PASS,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of franzroth@gmx.de designates 213.165.64.20 as permitted sender) Received: from [213.165.64.20] (HELO mail.gmx.net) (213.165.64.20) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 14 Apr 2010 11:42:31 +0000 Received: (qmail 31273 invoked by uid 0); 14 Apr 2010 11:42:10 -0000 Received: from 87.139.98.145 by www131.gmx.net with HTTP; Wed, 14 Apr 2010 13:42:09 +0200 (CEST) Content-Type: text/plain; charset="iso-8859-1" Date: Wed, 14 Apr 2010 13:42:09 +0200 From: "Franz Roth" Message-ID: <20100414114209.294260@gmx.net> MIME-Version: 1.0 Subject: PrefixQuery and special characters To: java-user@lucene.apache.org X-Authenticated: #6704461 X-Flags: 0001 X-Mailer: WWW-Mail 6100 (Global Message Exchange) X-Priority: 3 X-Provags-ID: V01U2FsdGVkX1/2/ANy5OH27Hci8BQzJhy+tH6RLsi52S649r02eI e0d6WPqqBnitbtKP8A2G/CF8k6h+4yUu4dQg== Content-Transfer-Encoding: 8bit X-GMX-UID: dcOgCpwGfW47YXcXEWVoAiBudmllcoVN X-FuHaFi: 0.51000000000000001 X-Virus-Checked: Checked by ClamAV on apache.org Hi all, say I have an Index with one field named "category". There are two documents one with value "(testvalue)" and one with value "test value". Now somone search with "test". My Searchenine uses the org.apache.lucene.search.PrefixQuery and finds 2 documents. Maybe he estimated only one hit; owever: if he searches for "(test" and the Searchengine uses the QueryParser.escape to clean the request and takes that PrefixQuery to search nothing results. How can I search for the document "(testvalue)" and only this one? Thx! package foo.bar; import java.io.IOException; import junit.framework.TestCase; import org.apache.log4j.Logger; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; public class TestPrefixQuery extends TestCase { public void testEscapeAndPrefix() throws CorruptIndexException, LockObtainFailedException, IOException { RAMDirectory directory = new RAMDirectory(); IndexWriter writer = new IndexWriter(directory, new StandardAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); doc.add(new Field("category", "(testvalue)", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); doc = new Document(); doc.add(new Field("category", "test value", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); String value= "test"; PrefixQuery query = new PrefixQuery(new Term("category", value)); //log.debug(query.toString()); IndexSearcher searcher = new IndexSearcher(directory); ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs; assertEquals("One for " + value , 2, hits.length); //I want one for this?! value= "(test"; String escaped = QueryParser.escape(value); query = new PrefixQuery(new Term("category", escaped)); //log.debug(query.toString()); hits = searcher.search(query, null, 1000).scoreDocs; assertEquals("One for " + value + "/" + escaped, 1, hits.length); //FAILS! } } -- GRATIS f�r alle GMX-Mitglieder: Die maxdome Movie-FLAT! Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01 --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org For additional commands, e-mail: java-user-help@lucene.apache.org