Elasticsearch doesn't have "read consistency" param (like Cassandra). But it has "write consistency" and "read preference".
Documentation says the following about Write Consistency
Write Consistency
To prevent writes from taking place on the "wrong" side of a network partition, by default, index operations only succeed if a quorum (>replicas/2+1) of active shards are available. This default can be overridden on a node-by-node basis using the action.write_consistency setting. To alter this behavior per-operation, the consistency request parameter can be used.Valid write consistency values are one, quorum, and all.
Note, for the case where the number of replicas is 1 (total of 2 copies of the data), then the default behavior is to succeed if 1 copy (the primary) can perform the write.
The index operation only returns after all active shards within the replication group have indexed the document (sync replication).
My question is about the last paragraph:
The index operation only returns after all active shards within the replication group have indexed the document (sync replication).
If write_consistency=quorum
(default) and all shards are live (no node failures, no network-partition), then:
1) Does index operation return as soon as quorum of
shards have finished indexing? (even though all shards are live/active)
2) Or does index operation return when all live/active shards have finished indexing? (i.e. quorum is considered only in case of failures/timeouts)
In the first case - read may be eventual-consistent (may get stale data), write is quicker.
In the second case - read is consistent (as long as there are no network-partitions), write is slower (as it waits for the slower shard/node).
Does anyone know how it works?
Another thing that I wonder about - is why the default value for 'preference' param (in get/search request) is randomized
but not _local
(which must have been more efficient I suppose)