[ https://issues.apache.org/jira/browse/LUCENE-6950?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15074016#comment-15074016 ]
ASF subversion and git services commented on LUCENE-6950: --------------------------------------------------------- Commit 1722165 from [~rcmuir] in branch 'dev/trunk' [ https://svn.apache.org/r1722165 ] LUCENE-6950: Fix FieldInfos handling of UninvertingReader > DimensionalRangeQuery not working with UninvertingReader > -------------------------------------------------------- > > Key: LUCENE-6950 > URL: https://issues.apache.org/jira/browse/LUCENE-6950 > Project: Lucene - Core > Issue Type: Bug > Reporter: Ishan Chattopadhyaya > Attachments: LUCENE-6950.patch, LUCENE-6950.patch, LUCENE-6950.patch, > LUCENE-6950.patch > > > As I was trying out dimensional fields for SOLR-8396, I realized that > DimensionalRangeQuery is not working with UninvertingReader. > In Solr, all directory readers are wrapped by an UninvertingReader and an > ExitableDirectoryReader. > Here's the error: > {code} > Exception in thread "main" java.lang.IllegalArgumentException: field="rating" > was indexed with numDims=0 but this query has numDims=1 > at > org.apache.lucene.search.DimensionalRangeQuery$1.scorer(DimensionalRangeQuery.java:186) > at org.apache.lucene.search.Weight.bulkScorer(Weight.java:135) > at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:667) > at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:474) > at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:593) > at > org.apache.lucene.search.IndexSearcher.searchAfter(IndexSearcher.java:451) > at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:462) > at > DimensionalRangeQueryExample.query(DimensionalRangeQueryExample.java:66) > {code} > Here's an example program to trigger this failure: > {code} > import java.io.IOException; > import java.util.HashMap; > import java.util.Map; > import java.util.Random; > import org.apache.lucene.analysis.standard.StandardAnalyzer; > import org.apache.lucene.document.DimensionalIntField; > import org.apache.lucene.document.Document; > import org.apache.lucene.document.Field; > import org.apache.lucene.document.Field.Store; > import org.apache.lucene.document.LegacyIntField; > import org.apache.lucene.document.StringField; > import org.apache.lucene.document.TextField; > import org.apache.lucene.index.DirectoryReader; > import org.apache.lucene.index.IndexWriter; > import org.apache.lucene.index.IndexWriterConfig; > import org.apache.lucene.index.StoredDocument; > import org.apache.lucene.queryparser.classic.ParseException; > import org.apache.lucene.search.DimensionalRangeQuery; > import org.apache.lucene.search.IndexSearcher; > import org.apache.lucene.search.LegacyNumericRangeQuery; > import org.apache.lucene.search.Query; > import org.apache.lucene.search.ScoreDoc; > import org.apache.lucene.search.TopDocs; > import org.apache.lucene.store.Directory; > import org.apache.lucene.store.RAMDirectory; > import org.apache.lucene.uninverting.UninvertingReader; > import org.apache.lucene.util.BytesRef; > public class DimensionalRangeQueryExample { > public static void main(String[] args) throws IOException, > ParseException { > StandardAnalyzer analyzer = new StandardAnalyzer(); > Directory index = new RAMDirectory(); > IndexWriterConfig config = new IndexWriterConfig(analyzer); > IndexWriter w = new IndexWriter(index, config); > addDoc(w, "Lucene in Action", 1); > addDoc(w, "Lucene for Dummies", 2); > addDoc(w, "Managing Gigabytes", 3); > addDoc(w, "The Art of Computer Science", 4); > w.commit(); > w.close(); > DirectoryReader reader = (DirectoryReader.open(index)); > Map<String, UninvertingReader.Type> uninvertingMap = new > HashMap<>(); > uninvertingMap.put("id", UninvertingReader.Type.BINARY); > uninvertingMap.put("rating", UninvertingReader.Type.INTEGER); > reader = UninvertingReader.wrap(reader, uninvertingMap); > IndexSearcher searcher = new IndexSearcher(reader); > Query legacyQuery = > LegacyNumericRangeQuery.newIntRange("rating_legacy", 1, 4, true, true); > Query dimensionalQuery = > DimensionalRangeQuery.new1DIntRange("rating", 1, true, 4, true); > System.out.println("Legacy query: "); > query(legacyQuery, searcher); // works > System.out.println("Dimensional query: "); > query(dimensionalQuery, searcher); // fails > > reader.close(); > } > private static void query(Query q, IndexSearcher searcher) throws > IOException { > int hitsPerPage = 10; > TopDocs docs = searcher.search(q, hitsPerPage); > ScoreDoc[] hits = docs.scoreDocs; > System.out.println("Found " + hits.length + " hits."); > for(int i=0;i<hits.length;++i) { > int docId = hits[i].doc; > StoredDocument d = searcher.doc(docId); > System.out.println((i + 1) + ". " + d); > } > } > private static void addDoc(IndexWriter w, String title, int rating) > throws IOException { > Document doc = new Document(); > String id = ""+new Random().nextInt(1000); > byte idBytes[] = id.getBytes(); > doc.add(new StringField("id", new BytesRef(idBytes), > Store.YES)); > doc.add(new TextField("title", title, Field.Store.YES)); > doc.add(new DimensionalIntField("rating", rating)); > LegacyIntField legacy = new LegacyIntField("rating_legacy", > rating, Store.YES); > legacy.setIntValue(rating); > doc.add(legacy); > w.addDocument(doc); > } > } > {code} > I don't yet know more as to why this could be. [~mikemccand] Any ideas, > please? > Apologies if I should've brought this up in the mailing lists, or as a > comment in LUCENE-6917 itself. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org