ElasticSearch 源码分析20 Explain

二、_explain

以上是对查询和分析过程进行说明,对于解释查询部分(好像和mysql挺像的),我们可以使用_explain向ElasticSearch询问庆于该文档是如何匹配(或者没有匹配上)的解释信息。例如,该文档能否在给定的查询中被检索到?如果找到了,ElasticSearch将返回分值计算的详细悠 ,以解释为什么该文档会匹配成功。

1.获取上下文context

2.然后根据请求的type和id,获取uidTerm

3.从上下文获取索引的分片indexShard,然后调用Get获取结果

3.1 .先检查该分片shard是否为可读状态

3.2 获取searcher,如下

 3.3 然后调用engine的get获取结果GetResult

   

3.4 首先加读锁readLock,然后调用ensureOpen判断engine是否是打开的

3.5 如果此次get是实时获取realtime,那么先获取版本号versionValue;校验不能是删除delete状态

3.6 再检查版本对于read是否冲突,如果冲突就抛出对应的异常

3.7 对于实时搜索realtime_get,就调用refresh刷新

3.8 最后调用getFromSearcher,获取docIdAndVersion

4.获取result,如果不存在就返回

5.结果存在,就解析请求request成为一个query

6.使用上下文的searcher来解析query,获取结果explanation

7.继续调用重新打分rescorer,来explain

8.最后把解析的结果explanation,包装成为一个ExplainResponse返回

猜你喜欢

转载自blog.csdn.net/kuaipao19950507/article/details/106580358