lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ching <zchin...@gmail.com>
Subject Re: Numeric range query not returning results
Date Tue, 05 Oct 2010 18:09:25 GMT
More problem with NumericRangeQuery when combined it with BooleanQuery. Here
are the problem, please help.

1. I have a field of Date that is indexed as long
2. In the search, I need to exclude some time period, I used the
BooleanQuery to combined those excluded time periods like below,
BooleanQuery excludeQ = new BooleanQuery();
NumericRangeQuery<Long> rangeQuery =
NumericRangeQuery.newLongRange(FIELD_SRC_DATE, datelower, dateUpper, true,
true);
excludeQ.add(rangeQuery, BooleanClause.Occur.MUST_NOT);

3. After perform the search using above query, it always returns nothing.

Thanks for any help or light to the tunnel.



On Mon, Oct 4, 2010 at 2:20 PM, Todd Nine <todd@spidertracks.co.nz> wrote:

> Hi Uwe,
>  My example wasn't very clear, as I have a load of other code in my
> actual implementation and I was trying to cut it down for clarity.  This
> is actually my indexing service for my Datanucleus Cassandra plugin, so
> I have a 1 to 1 relationship where a single document corresponds to a
> Persistent object.  I actually create 5 separate documents, and I would
> expect 3 of those to be returned.  I've ported your entire set of tests
> for 32 and 64 bit numeric range tests over, and it unfortunately appears
> that Lucandra is still very broken in terms of numeric ranges even after
> the Cassandra encoding fix for the 7bit shift into UTF 8 characters.
> I'll hopefully be able to solve the bugs in the next few days.  Thanks
> again for your help, it's always appreciated.
>
> Todd
>
>
>
>
> On Mon, 2010-10-04 at 07:55 +0200, Uwe Schindler wrote:
> > This test works perfectly and returns 1 doucment:
> >
> >
> >
> >   public void testToddNine() throws Exception {
> >
> >     RAMDirectory directory = new RAMDirectory();
> >
> >     IndexWriter writer = new IndexWriter(directory, new
> > WhitespaceAnalyzer(), true, MaxFieldLength.UNLIMITED);
> >
> >     try {
> >
> >       Document doc = new Document();
> >
> >       doc.add(new
> > NumericField("LastLogin").setLongValue(1282197146L));
> >
> >       writer.addDocument(doc);
> >
> >       doc = new Document();
> >
> >       doc.add(new
> > NumericField("LastLogin").setLongValue(1282197946L));
> >
> >       writer.addDocument(doc);
> >
> >     } finally {
> >
> >       writer.close();
> >
> >     }
> >
> >
> >
> >     NumericRangeQuery<Long> rangeQuery =
> >
> >       NumericRangeQuery.newLongRange("LastLogin", 1282197146L,
> > 1282197146L, true, true);
> >
> >
> >
> >     IndexReader reader = IndexReader.open(directory, true);
> >
> >     try {
> >
> >       IndexSearcher searcher = new IndexSearcher(reader);
> >
> >       TopDocs docs = searcher.search(rangeQuery, 1000);
> >
> >       assertEquals(1,docs.totalHits);
> >
> >     } finally {
> >
> >       reader.close();
> >
> >     }
> >
> >   }
> >
> >
> >
> > Maybe you have the following problems:
> >
> > -          Are you executing the same query than created. In your
> > example code the searcher executed “query” but the range query was
> > “rangeQuery” variable name
> >
> > -          Are you sure that your document is not returned, but you
> > miss some stored fields? E.g. the default NumericField ctor does not
> > create the field as “stored” to the document?
> >
> >
> >
> > public NumericField(String name)
> >
> > Creates a field for numeric values using the default precisionStep
> > NumericUtils.PRECISION_STEP_DEFAULT (4). The instance is not yet
> > initialized with a numeric value, before indexing a document
> > containing this field, set a value using the various set???Value()
> > methods. This constructor creates an indexed, but not stored field.
> >
> >
> >
> > Uwe
> >
> >
> >
> > -----
> >
> > Uwe Schindler
> >
> > H.-H.-Meier-Allee 63, D-28213 Bremen
> >
> > http://www.thetaphi.de
> >
> > eMail: uwe@thetaphi.de
> >
> >
> >
> >
> >
> > > -----Original Message-----
> >
> > > From: Todd Nine [mailto:todd@spidertracks.co.nz]
> >
> > > Sent: Monday, October 04, 2010 6:13 AM
> >
> > > To: java-user@lucene.apache.org
> >
> > > Subject: Numeric range query not returning results
> >
> > >
> >
> > > Hi all,
> >
> > >   I'm having some issues with Numeric Range queries not working as
> > expected.
> >
> > > My underlying storage medium is the Lucandra index reader and
> > writer, so I'm
> >
> > > not sure if this is an issue within Lucandra or with my usage of
> > numeric field.
> >
> > > My numeric range tests that are copies of Uwe's pass in the
> > Lucandra, source,
> >
> > > so I have a feeling it's my usage.  I have a simple test case, with
> > 5 people.  I
> >
> > > have a Date field, the LastLogin field.  This date is converted to
> > epoch
> >
> > > milliseconds, and stored in the index in the following way.
> >
> > >
> >
> > > NumericField numeric = new NumericField("LastLogin");
> >
> > > numeric.setLongValue(fieldValue); doc.add(numeric);
> >
> > >
> >
> > > Where I have the following 2 field values on 2 documents.
> >
> > >
> >
> > > 1282197146L and 1282197946L
> >
> > >
> >
> > > I then perform the following query.
> >
> > >
> >
> > > NumericRangeQuery rangeQuery =
> >
> > > NumericRangeQuery.newLongRange("LastLogin", 1282197146L,
> > 1282197146L,
> >
> > > true, true);
> >
> > >
> >
> > > IndexReader reader = new IndexReader(columnFamily,
> >
> > >
> > getContext(conn));
> >
> > >
> > IndexSearcher searcher = new
> >
> > > IndexSearcher(reader);
> >
> > >
> >
> > >                                                            TopDocs
> > docs = searcher.search(query,
> >
> > > maxResults);
> >
> > >
> >
> > >
> > List<Document> documents = new
> >
> > > ArrayList<Document>(
> >
> > >
> > docs.totalHits);
> >
> > >
> >
> > >
> > Set<String> fields = new HashSet<String>();
> >
> > >
> > fields.add(IndexDocument.ROWKEY);
> >
> > >
> > fields.add(IndexDocument.IDSERIALIZED);
> >
> > >
> >
> > >
> > SetBasedFieldSelector selector = new
> >
> > > SetBasedFieldSelector(
> >
> > >
> > fields, null);
> >
> > >
> >
> > >                                                            for
> > (ScoreDoc score : docs.scoreDocs) {
> >
> > >
> >
> > >             documents.add(reader.document(score.doc, selector));
> >
> > >                                                            }
> >
> > >
> >
> > >                                                            return
> > documents;
> >
> > >
> >
> > > I'm always getting 0 documents.  I know this is incorrect, I can see
> > the values
> >
> > > getting written to Cassandra when I run it in debug mode.  Is this
> > an issue with
> >
> > > precision step, or an issue with the Lucandra index reader
> > implementation?
> >
> > >
> >
> > > Thanks,
> >
> > > Todd
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message