From java-user-return-47746-apmail-lucene-java-user-archive=lucene.apache.org@lucene.apache.org Mon Nov 08 09:08:40 2010 Return-Path: Delivered-To: apmail-lucene-java-user-archive@www.apache.org Received: (qmail 85615 invoked from network); 8 Nov 2010 09:08:39 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 8 Nov 2010 09:08:39 -0000 Received: (qmail 61669 invoked by uid 500); 8 Nov 2010 09:09:09 -0000 Delivered-To: apmail-lucene-java-user-archive@lucene.apache.org Received: (qmail 61369 invoked by uid 500); 8 Nov 2010 09:09:06 -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 Delivered-To: moderator for java-user@lucene.apache.org Received: (qmail 37967 invoked by uid 99); 8 Nov 2010 08:49:44 -0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of prvs=921b9a2d6=aca@ngi.be designates 193.190.215.50 as permitted sender) X-IronPort-AV: E=Sophos;i="4.58,313,1286143200"; d="scan'208";a="3124465" Date: Mon, 8 Nov 2010 09:49:17 +0100 (CET) From: Alain Camus To: java-user@lucene.apache.org Message-ID: <4886798.70367.1289206157634.JavaMail.root@morpheus> In-Reply-To: <008b01cb7d01$84dbd5b0$8e938110$@thetaphi.de> Subject: Re: RangeQuery with multiple ranges ? MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.1.110.110] X-Mailer: Zimbra 6.0.8_GA_2661 (ZimbraWebClient - FF3.0 (Win)/6.0.8_GA_2661) X-Virus-Checked: Checked by ClamAV on apache.org Hello, Thanks for your replies. I'm sorry but I couldn't get one of David's or Uwe= 's solution to work. For the QueryParser, I tried : QueryParser parser =3D new QueryParser("denominator", new StandardAnalyzer(= )); Query bq =3D new BooleanQuery();=20 try { =09bq =3D parser.parse("+denominator:([10000 TO 10000] OR [20000 TO 20000])= "); } catch (ParseException pe) { =09Log.error(Geonet.SEARCH_ENGINE, "\n\nQueryParser.parse exception\n" + pe= + "\n\n"); } BooleanClause.Occur scaleOccur =3D LuceneUtils.convertRequiredAndProhibited= ToOccur(true, false); BooleanClause scaleRangeClause =3D new BooleanClause(bq, scaleOccur); query.add(scaleRangeClause); With TermRangeQuery : BooleanClause.Occur scaleOccur =3D LuceneUtils.convertRequiredAndProhibited= ToOccur(true, false); String term1 =3D "10000", term2 =3D "50000"; BooleanQuery bq =3D new BooleanQuery(); bq.add(new TermRangeQuery(LuceneIndexField.SCALE, term1, term1, true, true)= , BooleanClause.Occur.SHOULD); bq.add(new TermRangeQuery(LuceneIndexField.SCALE, term2, term2, true, true)= , BooleanClause.Occur.SHOULD); BooleanClause scaleRangeClause =3D new BooleanClause(bq, scaleOccur); query.add(scaleRangeClause); I also tried with Uwe's code for the deprecated RangeQuery. The result I get is always the same :=20 +((+denominator:[10000 TO 10000] +denominator:[50000 TO 50000])~1) which doesn't work, neither deployed on the server or in Luke. The queries = that works in Luke are=20 +denominator:([10000 TO 10000] OR [50000 TO 50000]) or +denominator:([10000 TO 10000] [50000 TO 50000]) A little more background information : * The field denominator is indexed alphabetically. If it was indexed numer= ically, I'd be fine with a simple NumericRangeQuery [10000 TO 50000] but I = don't have the time to change the way it is indexed (it will be for the nex= t release).=20 * If you have a solution where denominator takes a single value and not a = range (like +denominator:(10000 OR 50000)), that is probably what I'm looki= ng for. * I have to insert this query in a global query, hence the last line query= .add(scaleRangeClause); * The deprecated RangeQuery is used everywhere in the code I'm modifying, = so I didn't try to replace it with TermRangeQuery and NumericRangeQuery. Would you have another hint ? Alain ----- Mail original ----- De: "David Fertig" =C3=80: java-user@lucene.apache.org Envoy=C3=A9: Vendredi 5 Novembre 2010 16:43:42 Objet: RE: RangeQuery with multiple ranges ? You can use a query parser to parse your text query into the appropriate qu= ery objects. ----- Mail original ----- De: "Uwe Schindler" =C3=80: java-user@lucene.apache.org Envoy=C3=A9: Vendredi 5 Novembre 2010 16:52:58 Objet: RE: RangeQuery with multiple ranges ? Why do you use such complicated stuff to build the BQ? Term term1 =3D new Term(LuceneIndexField.SCALE, "10000"); Term term2 =3D new Term(LuceneIndexField.SCALE, "50000"); BooleanQuery bq =3D new BooleanQuery(); bq.add(new RangeQuery(term1, term1, true), BooleanClause.Occur.SHOULD);=20 bq.add(new RangeQuery(term2, term2, true), BooleanClause.Occur.SHOULD); By the way, your code is outdated, you should better use NumericRangeQuery = for numerics! Else RangeQuery is deprecated and replaced by TermRangeQuery: String term1 =3D "10000", term2 =3D "50000"; BooleanQuery bq =3D new BooleanQuery(); bq.add(new TermRangeQuery(LuceneIndexField.SCALE, term1, term1, true, true)= , BooleanClause.Occur.SHOULD);=20 bq.add(new TermRangeQuery(LuceneIndexField.SCALE, term2, term2, true, true)= , BooleanClause.Occur.SHOULD); Uwe ----- Uwe Schindler H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de eMail: uwe@thetaphi.de > -----Original Message----- > From: Alain Camus [mailto:aca@ngi.be] > Sent: Friday, November 05, 2010 4:26 PM > To: java-user@lucene.apache.org > Subject: RangeQuery with multiple ranges ? >=20 > Hello list, >=20 > I'm new to lucene, trying to find out if this is possible : >=20 > In Luke, I can write a query that gets me the results I want, that is : > +denominator:([10000 TO 10000] OR [20000 TO 20000]) >=20 > I'd like to write the same in java. I tried the next code but it doesn't = work : > BooleanClause.Occur scaleOccur =3D > LuceneUtils.convertRequiredAndProhibitedToOccur(true, false); > Term term1 =3D new Term(LuceneIndexField.SCALE, "10000"); > Term term2 =3D new Term(LuceneIndexField.SCALE, "50000"); > RangeQuery rangeQuery1 =3D new RangeQuery(term1, term1, true); > RangeQuery rangeQuery2 =3D new RangeQuery(term2, term2, true); > BooleanQuery booleanQuery =3D new BooleanQuery(); > booleanQuery .setMinimumNumberShouldMatch(1); > booleanQuery .add(rangeQuery1, scaleOccur); > booleanQuery .add(rangeQuery2, scaleOccur); > BooleanClause scaleRangeClause =3D new BooleanClause(bq, scaleOccur); > query.add(scaleRangeClause); > The resulting query doesn't give me the expected results : > +((+denominator:[10000 TO 10000] +denominator:[50000 TO 50000])~1) >=20 > Is it possible to do what I want ? Any documentation I could read about t= his ? >=20 > Alain --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org For additional commands, e-mail: java-user-help@lucene.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org For additional commands, e-mail: java-user-help@lucene.apache.org