MarcusSorealheis commented on code in PR #12208: URL: https://github.com/apache/lucene/pull/12208#discussion_r1158063696
########## lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java: ########## @@ -842,6 +844,95 @@ public void testRewriteSimplePhrase() throws Exception { IOUtils.close(w, r, dir); } + public void testExplainNonMatchingDocument() throws Exception { + TermAutomatonQuery q = new TermAutomatonQuery("field"); + int initState = q.createState(); + int s1 = q.createState(); + int s2 = q.createState(); + q.addTransition(initState, s1, "xml"); + q.addTransition(s1, s2, "json"); + q.setAccept(s2, true); + q.finish(); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir); + Document doc = new Document(); + doc.add(newTextField("field", "protobuf", Field.Store.NO)); + w.addDocument(doc); + + IndexReader r = w.getReader(); + IndexSearcher searcher = newSearcher(r); + Query rewrite = q.rewrite(searcher); + assertTrue(rewrite instanceof PhraseQuery); + + TopDocs topDocs = searcher.search(rewrite, 10); + assertEquals(0, topDocs.totalHits.value); + + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { Review Comment: the loop is not needed. I added to understand how things were working. I am removing it. ########## lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java: ########## @@ -842,6 +844,95 @@ public void testRewriteSimplePhrase() throws Exception { IOUtils.close(w, r, dir); } + public void testExplainNonMatchingDocument() throws Exception { + TermAutomatonQuery q = new TermAutomatonQuery("field"); + int initState = q.createState(); + int s1 = q.createState(); + int s2 = q.createState(); + q.addTransition(initState, s1, "xml"); + q.addTransition(s1, s2, "json"); + q.setAccept(s2, true); + q.finish(); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir); + Document doc = new Document(); + doc.add(newTextField("field", "protobuf", Field.Store.NO)); + w.addDocument(doc); + + IndexReader r = w.getReader(); + IndexSearcher searcher = newSearcher(r); + Query rewrite = q.rewrite(searcher); + assertTrue(rewrite instanceof PhraseQuery); Review Comment: Actually, I need to think about what to do here more. I'm not exactly sure. ########## lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java: ########## @@ -842,6 +844,95 @@ public void testRewriteSimplePhrase() throws Exception { IOUtils.close(w, r, dir); } + public void testExplainNonMatchingDocument() throws Exception { + TermAutomatonQuery q = new TermAutomatonQuery("field"); + int initState = q.createState(); + int s1 = q.createState(); + int s2 = q.createState(); + q.addTransition(initState, s1, "xml"); + q.addTransition(s1, s2, "json"); + q.setAccept(s2, true); + q.finish(); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir); + Document doc = new Document(); + doc.add(newTextField("field", "protobuf", Field.Store.NO)); + w.addDocument(doc); + + IndexReader r = w.getReader(); + IndexSearcher searcher = newSearcher(r); + Query rewrite = q.rewrite(searcher); + assertTrue(rewrite instanceof PhraseQuery); + + TopDocs topDocs = searcher.search(rewrite, 10); + assertEquals(0, topDocs.totalHits.value); + + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + Explanation explanation = searcher.explain(rewrite, scoreDoc.doc); + assertNotNull("Explanation should not be null", explanation); + assertTrue( + "Explanation score should match the actual score", + Float.compare(scoreDoc.score, (Float) explanation.getValue()) == 0); + } + + IOUtils.close(w, r, dir); + } + + // TODO: improve experience of working with explain + Review Comment: good catch ########## lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java: ########## @@ -842,6 +844,95 @@ public void testRewriteSimplePhrase() throws Exception { IOUtils.close(w, r, dir); } + public void testExplainNonMatchingDocument() throws Exception { + TermAutomatonQuery q = new TermAutomatonQuery("field"); + int initState = q.createState(); + int s1 = q.createState(); + int s2 = q.createState(); + q.addTransition(initState, s1, "xml"); + q.addTransition(s1, s2, "json"); + q.setAccept(s2, true); + q.finish(); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir); + Document doc = new Document(); + doc.add(newTextField("field", "protobuf", Field.Store.NO)); + w.addDocument(doc); + + IndexReader r = w.getReader(); + IndexSearcher searcher = newSearcher(r); + Query rewrite = q.rewrite(searcher); + assertTrue(rewrite instanceof PhraseQuery); Review Comment: I need to do some digging quickly on the query types and try to understand how to also get the explain query type. I also need to add you to Mike to the changes.txt. You're holding my hand here. ########## lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestTermAutomatonQuery.java: ########## @@ -842,6 +844,95 @@ public void testRewriteSimplePhrase() throws Exception { IOUtils.close(w, r, dir); } + public void testExplainNonMatchingDocument() throws Exception { + TermAutomatonQuery q = new TermAutomatonQuery("field"); + int initState = q.createState(); + int s1 = q.createState(); + int s2 = q.createState(); + q.addTransition(initState, s1, "xml"); + q.addTransition(s1, s2, "json"); + q.setAccept(s2, true); + q.finish(); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir); + Document doc = new Document(); + doc.add(newTextField("field", "protobuf", Field.Store.NO)); + w.addDocument(doc); + + IndexReader r = w.getReader(); + IndexSearcher searcher = newSearcher(r); + Query rewrite = q.rewrite(searcher); + assertTrue(rewrite instanceof PhraseQuery); + + TopDocs topDocs = searcher.search(rewrite, 10); + assertEquals(0, topDocs.totalHits.value); + + for (ScoreDoc scoreDoc : topDocs.scoreDocs) { + Explanation explanation = searcher.explain(rewrite, scoreDoc.doc); + assertNotNull("Explanation should not be null", explanation); + assertTrue( + "Explanation score should match the actual score", + Float.compare(scoreDoc.score, (Float) explanation.getValue()) == 0); + } + + IOUtils.close(w, r, dir); + } + + // TODO: improve experience of working with explain Review Comment: I think that explain has many areas of potential improvement. How granular the explain gets, the formatting, testing, among other things. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org