Search的运行机制
Search执行的时候分为两个运行步骤:
- Query阶段
- Fetch阶段
Query阶段
Fetch阶段
相关性算分问题
- 相关性算分在shard与shard之间是相互独立的,也就意味着同一个Term的IDF等值在不同shard上是不同的,文档的相关性算分和它所处的shard相关
- 在文档数量不多时,会导致相关性算分严重不准的情况发生
解决思路有两个:
- 一是设置分片数为1个,从根本上排除问题,在文档数量不多的时候可以考虑该方案,比如百万到千万级别的数量。
-
二是使用DFS Query-Then-Fetch查询方式
排序
es默认会采用相关性算分排序,用户可以通过设定sorting参数来自行设定排序规则
分页与遍历
es提供了3种方式来解决分页与遍历的问题:
- from/size
- scroll
- search_after