From fa3cd86de8fa11a2cfb5b3db0a46c83c5b6a980b Mon Sep 17 00:00:00 2001 From: Mike McCandless Date: Thu, 5 Jul 2018 10:16:55 -0400 Subject: [PATCH] LUCENE-8379: add TermQuery.getTermStates --- lucene/CHANGES.txt | 2 ++ .../org/apache/lucene/search/TermQuery.java | 7 +++++ .../apache/lucene/search/TestTermQuery.java | 30 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index b0d4e3f3e01..53c19d5d201 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -130,6 +130,8 @@ API Changes: * LUCENE-8378: Add DocIdSetIterator.range static method to return an iterator matching a range of docids (Mike McCandless) +* LUCENE-8379: Add experimental TermQuery.getTermStates method (Mike McCandless) + Bug Fixes: * LUCENE-8380: UTF8TaxonomyWriterCache inconsistency. (Ruslan Torobaev, Dawid Weiss) diff --git a/lucene/core/src/java/org/apache/lucene/search/TermQuery.java b/lucene/core/src/java/org/apache/lucene/search/TermQuery.java index 022dc994838..ccb1de670e1 100644 --- a/lucene/core/src/java/org/apache/lucene/search/TermQuery.java +++ b/lucene/core/src/java/org/apache/lucene/search/TermQuery.java @@ -217,6 +217,13 @@ public class TermQuery extends Query { return buffer.toString(); } + /** Returns the {@link TermStates} passed to the constructor, or null if it was not passed. + * + * @lucene.experimental */ + public TermStates getTermStates() { + return perReaderTermState; + } + /** Returns true iff o is equal to this. */ @Override public boolean equals(Object other) { diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTermQuery.java b/lucene/core/src/test/org/apache/lucene/search/TestTermQuery.java index 3b47174e288..e460e26ddba 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestTermQuery.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestTermQuery.java @@ -92,6 +92,36 @@ public class TestTermQuery extends LuceneTestCase { IOUtils.close(reader, w, dir); } + public void testGetTermStates() throws Exception { + + // no term states: + assertNull(new TermQuery(new Term("foo", "bar")).getTermStates()); + + Directory dir = newDirectory(); + RandomIndexWriter w = new RandomIndexWriter(random(), dir, newIndexWriterConfig().setMergePolicy(NoMergePolicy.INSTANCE)); + // segment that contains the term + Document doc = new Document(); + doc.add(new StringField("foo", "bar", Store.NO)); + w.addDocument(doc); + w.getReader().close(); + // segment that does not contain the term + doc = new Document(); + doc.add(new StringField("foo", "baz", Store.NO)); + w.addDocument(doc); + w.getReader().close(); + // segment that does not contain the field + w.addDocument(new Document()); + + DirectoryReader reader = w.getReader(); + FilterDirectoryReader noSeekReader = new NoSeekDirectoryReader(reader); + IndexSearcher noSeekSearcher = new IndexSearcher(noSeekReader); + Query query = new TermQuery(new Term("foo", "bar")); + TermQuery queryWithContext = new TermQuery(new Term("foo", "bar"), + TermStates.build(reader.getContext(), new Term("foo", "bar"), true)); + assertNotNull(queryWithContext.getTermStates()); + IOUtils.close(reader, w, dir); + } + private static class NoSeekDirectoryReader extends FilterDirectoryReader { public NoSeekDirectoryReader(DirectoryReader in) throws IOException {