### 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/index/shard/ShardSplittingQueryTests.java
luceneDocs(indexRouting, hasNested, j, randomBoolean() ? null : randomRealisticUnicodeOfCodepointLengthBetween(1, 5))
            );
        }
        writer.commit();
        writer.close();
        assertSplit(dir, metadata, targetShardId, hasNested);
        dir.close();
    }
    public void testSplitOnRoutingPartitioned() throws IOException {
        SeqNoFieldMapper.SequenceIDFields sequenceIDFields = SeqNoFieldMapper.SequenceIDFields.emptySeqID();
        Directory dir = newFSDirectory(createTempDir());
        final int numDocs = randomIntBetween(50, 100);
        RandomIndexWriter writer = new RandomIndexWriter(random(), dir);
        int numShards = randomIntBetween(2, 10);
        IndexMetadata metadata = IndexMetadata.builder("test")
            .settings(Settings.builder().put(IndexMetadata.SETTING_VERSION_CREATED, IndexVersion.current()))
            .numberOfShards(numShards)
            .setRoutingNumShards(numShards * 1000000)
            .routingPartitionSize(randomIntBetween(1, 10))
            .numberOfReplicas(0)
            .build();
        IndexRouting indexRouting = IndexRouting.fromIndexMetadata(metadata);
        boolean hasNested = randomBoolean();
        int targetShardId = randomIntBetween(0, numShards - 1);
        for (int j = 0; j < numDocs; j++) {
            writer.addDocuments(luceneDocs(indexRouting, hasNested, j, randomRealisticUnicodeOfCodepointLengthBetween(1, 5)));
        }
        writer.commit();
        writer.close();
        assertSplit(dir, metadata, targetShardId, hasNested);