由于SearchHandler过程比较复杂,基本每次用到都需要重新看一眼才能记忆,而且还比较容易记错。因此索引把写博文一来方便自己,二来方便别人。
当然,对Solr来讲SearchHandler并不复杂,而且十分简洁和清晰。不过,在SolrCloud下由于需要节点的协助,所以变得有些复杂。同时SolrCloud下的设计非常巧妙,非常值得细读和参考。
先看一眼Solr下SearchHandler流程。
主干流程就是这样,比较清晰简单。当然后细节依然比较复杂,主要原因Solr在组织代码的时候并没有单机与分布式的逻辑分开来。也就是单机与分布式的代码是堆一起的,这只是其一;其次是因为处理搜索的处理器QueryComponent逻辑也非常复杂。对了解SearchHandler而言,我觉得上面的流程就可以。对于查询语法的解析,搜索逻辑以及搜索过程都出现QueryComponent中,另找机会介绍这一块,本文不详述这块内容。
SearchHandler#inform(SolrCore core) {
Object declaredComponents = initArgs.get(INIT_COMPONENTS);
List<String> first = (List<String>) initArgs.get(INIT_FIRST_COMPONEMTS);
List<String> last = (List<String>) initArgs.get(INIT_LAST_COMPONENTS);