### CI Link

https://gradle-enterprise.elastic.co/s/n6mmfb3uwtq7q

### Repro line

./gradlew ':server:test' --tests "org.elasticsearch.search.internal.ContextIndexSearcherTests.testIntersectScorerAndRoleBits" \   -Dtests.seed=E99DBC08AEFDABC1 \   -Dtests.locale=und \   -Dtests.timezone=America/Santarem \   -Druntime.java=20

### Does it reproduce?

Yes

### Applicable branches

main

### Failure history

_No response_

### Failure excerpt

10:13:31 org.elasticsearch.search.internal.ContextIndexSearcherTests > testIntersectScorerAndRoleBits FAILED
10:13:31     java.lang.AssertionError: The top-reader used to create Weight is not the same as the current reader's top-reader (org.apache.lucene.index.CompositeReaderContext@4afc5040
10:13:31         at __randomizedtesting.SeedInfo.seed([E99DBC08AEFDABC1:41ACDD81C7F3BEAA]:0)
10:13:31         at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:105)
10:13:31         at org.apache.lucene.search.Weight.scorerSupplier(Weight.java:136)
10:13:31         at org.apache.lucene.search.LRUQueryCache$CachingWrapperWeight.scorerSupplier(LRUQueryCache.java:759)
10:13:31         at org.apache.lucene.tests.search.AssertingWeight.scorerSupplier(AssertingWeight.java:80)
10:13:31         at org.apache.lucene.search.ConstantScoreQuery$1.scorerSupplier(ConstantScoreQuery.java:153)
10:13:31         at org.apache.lucene.tests.search.AssertingWeight.scorerSupplier(AssertingWeight.java:80)
10:13:31         at org.apache.lucene.tests.search.AssertingWeight.scorer(AssertingWeight.java:66)
10:13:31         at org.elasticsearch.search.internal.ContextIndexSearcherTests.testIntersectScorerAndRoleBits(ContextIndexSearcherTests.java:157)

server/src/test/java/org/elasticsearch/common/lucene/LuceneTests.java
IOUtils.close(writer, dir);
    }
    public void testSortFieldSerialization() throws IOException {
        Tuple<SortField, SortField> sortFieldTuple = randomSortField();
        SortField deserialized = copyInstance(
            sortFieldTuple.v1(),
            EMPTY_REGISTRY,
            Lucene::writeSortField,
            Lucene::readSortField,
            TransportVersionUtils.randomVersion(random())
        );
        assertEquals(sortFieldTuple.v2(), deserialized);
    }
    public void testSortValueSerialization() throws IOException {
        Object sortValue = randomSortValue();
        Object deserialized = copyInstance(
            sortValue,
            EMPTY_REGISTRY,
            Lucene::writeSortValue,
            Lucene::readSortValue,
            TransportVersionUtils.randomVersion(random())
        );
        assertEquals(sortValue, deserialized);
    }
    public static Object randomSortValue() {
        return switch (randomIntBetween(0, 9)) {
            case 0 -> null;
            case 1 -> randomAlphaOfLengthBetween(3, 10);
            case 2 -> randomInt();
            case 3 -> randomLong();