lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tarr, Gregory" <Gregory.t...@detica.com>
Subject Multi value NumericFields - major issue
Date Thu, 09 Jun 2011 09:25:35 GMT
The javadocs for NumericField (lucene 2.9.4) state:

You may add the same field name as a NumericField to the same document
more than once. Range querying and filtering will be the logical OR of
all values; so a range query will hit all documents that have at least
one value in the range

Furthermore, the precisionStep is defined only in terms of performance
and disk space, not in terms of affecting the results.

However, the unit test below shows that the precisionStep directly
affects the results when using multi-value fields:

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
RAMDirectory directory = new RAMDirectory();
IndexWriter writer = new IndexWriter(directory, analyzer, true,
IndexWriter.MaxFieldLength.UNLIMITED);
Document document = new Document();
document.add(new NumericField("number", 4, Field.Store.YES,
true).setLongValue(480));
document.add(new NumericField("number", 4, Field.Store.YES,
true).setLongValue(180));
writer.addDocument(document);
IndexSearcher searcher = new IndexSearcher(directory, true);
Query q = new FilteredQuery(new MatchAllDocsQuery(),
NumericRangeFilter.newLongRange("number", 444l, 10000l, true, true));
TopDocs docs = searcher.search(q, null, 10);
Assert.assertEquals(1, docs.totalHits);

analyzer = new StandardAnalyzer(Version.LUCENE_29);
directory = new RAMDirectory();
writer = new IndexWriter(directory, analyzer, true,
IndexWriter.MaxFieldLength.UNLIMITED);
document = new Document();
document.add(new NumericField("number", 6, Field.Store.YES,
true).setLongValue(480));
document.add(new NumericField("number", 6, Field.Store.YES,
true).setLongValue(180));
writer.addDocument(document);
searcher = new IndexSearcher(directory, true);
q = new FilteredQuery(new MatchAllDocsQuery(),
NumericRangeFilter.newLongRange("number", 444l, 10000l, true, true));
docs = searcher.search(q, null, 10);
Assert.assertEquals(1, docs.totalHits); // fails, due to increased
precision Step

Any help would be greatly appreciated

Greg

Please consider the environment before printing this email.

This message should be regarded as confidential. If you have received this email in error
please notify the sender and destroy it immediately.

Statements of intent shall only become binding when confirmed in hard copy by an authorised
signatory.  The contents of this email may relate to dealings with other companies under the
control of Detica Limited, details of which can be found at http://www.detica.com/statutory-information.

Detica Limited is registered in England under No: 1337451.
Registered offices: Surrey Research Park, Guildford, Surrey, GU2 7YP, England.

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