This is unexpected, but I tried and failed to reproduce this on a 5-node 6.3.1 cluster with replicas on each node:
$ curl 'http://localhost:9200/_cat/shards'
i 0 p STARTED 1 3.3kb 127.0.0.1 node-3
i 0 r STARTED 1 3.3kb 127.0.0.1 node-1
i 0 r STARTED 1 3.3kb 127.0.0.1 node-4
i 0 r STARTED 1 3.3kb 127.0.0.1 node-2
i 0 r STARTED 1 3.3kb 127.0.0.1 node-0
$ for n in $(seq 3); do for i in 9200 9201 9202 9203 9204; do curl -s http://localhost:$i'/i/_search?preference=abc' -H 'Content-type: application/json' --data-binary $'{"explain":true}'; echo; done; done
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":0,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":3,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":2,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
{"took":1,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_shard":"[i][0]","_node":"hVgSuGbWTfaR566eWnA2Bw","_index":"i","_type":"_doc","_id":"test","_score":1.0,"_source":{"test":"test"},"_explanation":{"value":1.0,"description":"*:*","details":[]}}]}}
The ?preference
option really fixes a preference order of the copies of each shard, because nodes may reject searches (e.g. if they are overloaded or disconnected from the coordinating node). The coordinating node starts with the first copy in the list but if this is rejected then it will try later ones. Are you only seeing this effect on busier clusters?
It's not too easy to observe this happening, but you could try setting this on the coordinating node:
logger.org.elasticsearch.action.search.TransportSearchAction: TRACE
Note that this will generate a lot of output and may affect performance if the coordinating node is serving a lot of other searches.