面试题答案
一键面试_random
- 影响机制:该取值会随机选择一个分片副本执行查询。这意味着每次执行相同查询时,可能会基于不同分片副本的数据进行计算,从而对相关性排序产生影响。由于不同副本数据的时效性、文档存储顺序等细节可能存在微小差异,所以每次查询得到的相关性排序结果在理论上会有一定随机性,但整体上对于大规模数据集且数据分布均匀的情况下,结果差异通常较小。不过在数据量较小或者数据分布不均匀时,可能会导致排序结果有较明显不同。
_primary
- 影响机制:指定只在主分片上执行查询。主分片数据是原始写入的数据,相比副本在一致性上更具权威性。在查询时,只依据主分片数据计算相关性排序,避免了副本可能存在的延迟同步等情况带来的干扰。如果主分片的数据相对稳定且能代表整个数据集的特性,那么这种偏好能提供相对稳定、可预测的相关性排序结果。但如果主分片出现数据异常(如数据损坏等),可能会导致查询结果异常,并且在主分片负载过高时,查询性能可能会受到影响。
自定义值(如 node_id:shard_id 等形式)
- 影响机制:使用自定义值时,Elasticsearch 会根据该值来选择特定的分片副本执行查询。如果自定义值指定的分片副本数据有独特的特征(例如特定时间范围的数据、特定业务属性的数据等),那么基于该分片副本计算的相关性排序会反映出这些数据特征。比如,若指定的分片副本存储了近期更新的数据,且查询条件与数据更新时间有关,那么相关性排序结果会更偏向近期更新的数据,而与基于其他分片副本(存储旧数据)计算的排序结果不同。