From what I can tell: https://github.com/apache/lucene/pull/12380 is the cause.



I am still digging into the deeper reason. It seems like we shouldn't call `get` but instead should call `finish()`

Replicate:
```
./gradlew ':rest-api-spec:yamlRestTest' --tests "org.elasticsearch.test.rest.ClientYamlTestSuiteIT.test {yaml=suggest/30_context/Skip duplicates with contexts should work}"
```

<details>
<summary> Trace </summary>


```
 1> [2023-08-22T18:25:26,962][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [test-cluster-0] fatal error in thread [elasticsearch[test-cluster-0][search][T#1]], exiting java.lang.AssertionError
  1>    at org.apache.lucene.suggest@9.8.0-snapshot-6a2d2c4057b/org.apache.lucene.search.suggest.document.TopSuggestDocsCollector.get(TopSuggestDocsCollector.java:146)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.suggest.completion.CompletionSuggester.innerExecute(CompletionSuggester.java:50)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.suggest.completion.CompletionSuggester.innerExecute(CompletionSuggester.java:30)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.suggest.Suggester.execute(Suggester.java:42)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.suggest.SuggestPhase.execute(SuggestPhase.java:42)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.query.QueryPhase.executeQuery(QueryPhase.java:116)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.query.QueryPhase.execute(QueryPhase.java:63)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.SearchService.loadOrExecuteQueryPhase(SearchService.java:515)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:667)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.search.SearchService.lambda$executeQueryPhase$2(SearchService.java:540)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:51)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.action.ActionRunnable$2.accept(ActionRunnable.java:48)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.action.ActionRunnable$3.doRun(ActionRunnable.java:73)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:33)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:983)
  1>    at org.elasticsearch.server@8.11.0-SNAPSHOT/org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26)
  1>    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
  1>    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
  1>    at java.base/java.lang.Thread.run(Thread.java:1623)
```

</details>
x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authz/accesscontrol/FieldSubsetReaderTests.java
termsEnum = terms.iterator();
        assertEquals(SeekStatus.FOUND, termsEnum.seekCeil(new BytesRef("fieldA")));
        assertEquals(SeekStatus.NOT_FOUND, termsEnum.seekCeil(new BytesRef("fieldB")));
        assertEquals(new BytesRef("fieldC"), termsEnum.term());
        assertEquals(SeekStatus.END, termsEnum.seekCeil(new BytesRef("fieldD")));
        TestUtil.checkReader(ir);
        IOUtils.close(ir, iw, dir);
    }
    /**
     * test _field_names where a field is permitted, but doesn't exist in the segment.
     */
    public void testFieldNamesMissing() throws Exception {
        Directory dir = newDirectory();
        IndexWriterConfig iwc = new IndexWriterConfig(null);
        IndexWriter iw = new IndexWriter(dir, iwc);
        
        Document doc = new Document();
        doc.add(new StringField("fieldA", "test", Field.Store.NO));
        doc.add(new StringField("fieldB", "test", Field.Store.NO));
        doc.add(new StringField(FieldNamesFieldMapper.NAME, "fieldA", Field.Store.NO));
        doc.add(new StringField(FieldNamesFieldMapper.NAME, "fieldB", Field.Store.NO));
        iw.addDocument(doc);
        
        Automaton automaton = Automatons.patterns(Arrays.asList("fieldA", "fieldC", FieldNamesFieldMapper.NAME));
        DirectoryReader ir = FieldSubsetReader.wrap(DirectoryReader.open(iw), new CharacterRunAutomaton(automaton));
        
        LeafReader segmentReader = ir.leaves().get(0).reader();
        Terms terms = segmentReader.terms(FieldNamesFieldMapper.NAME);
        
        TermsEnum termsEnum = terms.iterator();