`
13shu
  • 浏览: 72020 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

solr 查询解析流程

    博客分类:
  • solr
阅读更多

1、请求被solr的过滤器拦截转发到RequestHandlerBase中的handleRequest()

2、handleRequest()中调用handleRequestBody()(抽象的)

根据请求参数qt=standard查找solrconfig.xml配置文件(SolrConfig初始化)中找到SearchHandler类

	<requestHandler name="standard" class="solr.SearchHandler"
		default="true">
		<!-- default values for query parameters -->
		<lst name="defaults">
			<str name="echoParams">explicit</str>
			<!--
				<int name="rows">10</int>
				<str name="fl">*</str>
				<str name="version">2.1</str>
			-->
		</lst>
	</requestHandler>

3、调用SearchHandler中handleRequestBody()去遍历查询组件集合

      for( SearchComponent c : components ) {
        c.prepare(rb);
      }

 

4、以QueryComponent为例执行prepare(),根据defType参数得到QParser(默认=lucene)

QParser parser = QParser.getParser(rb.getQueryString(), defType, req);

5、通过defType参数获得QParserPlugin

  public static QParser getParser(String qstr, String defaultType, SolrQueryRequest req) throws ParseException {
    SolrParams localParams = QueryParsing.getLocalParams(qstr, req.getParams());
    String type;
    
    if (localParams == null) {
      type = defaultType;
    } else {
      String localType = localParams.get(QueryParsing.TYPE);
      type = localType == null ? defaultType : localType;
      qstr = localParams.get("v");
    }

    type = type==null ? QParserPlugin.DEFAULT_QTYPE : type;

    QParserPlugin qplug = req.getCore().getQueryPlugin(type);
    return qplug.createParser(qstr, localParams, req.getParams(), req);
  }

 6、QueryComponent中调用解析

QParser parser = QParser.getParser(rb.getQueryString(), defType, req);
      rb.setQuery( parser.getQuery() );

 7、解析完成返回

  public Query parse() throws ParseException {
    String qstr = getString();

    String defaultField = getParam(CommonParams.DF);
    if (defaultField==null) {
      defaultField = getReq().getSchema().getDefaultSearchFieldName();
    }
    lparser = new SolrQueryParser(this, defaultField);

    // these could either be checked & set here, or in the SolrQueryParser constructor
    String opParam = getParam(QueryParsing.OP);
    if (opParam != null) {
      lparser.setDefaultOperator("AND".equals(opParam) ? QueryParser.Operator.AND : QueryParser.Operator.OR);
    } else {
      // try to get default operator from schema
      QueryParser.Operator operator = getReq().getSchema().getSolrQueryParser(null).getDefaultOperator();
      lparser.setDefaultOperator(null == operator ? QueryParser.Operator.OR : operator);
    }

    return lparser.parse(qstr);
  }

 

 

分享到:
评论

相关推荐

    itrip爱旅行网2017版源码+架构分析+视频技术讲解+部署(文件过大,此为百度云链接文件)

    网站部署效果请参考真实itrip网站效果(https://www.itrip.com/),资源包括:itrip需求分析讲解、网站架构流程图解析、网站核心技术难关(包括:模块调用,模块部署,涉及nginx,nexus等,前后端分离,SSO,Solr,...

    blog-master (1).zip

    Ehcache(纯Java的进程内缓存框架,是一种广泛使用的开源Java分布式缓存,具有快速、精干等特点) ,pageHelper(Mybatis分页查询的工具),jsoup(一款基于Java的HTML解析器),Revolvermaps(可视化插件,可使用其他可视化...

    Lucene中的FST算法描述

    描述了Lucene中如何使用FST算法构建term的内存索引,使用了很多图,直观的展现了FST图的构建流程,能够对想了解lucene内部实现机制原理的同学有帮助。

    爱旅行网2019版源码+架构分析+视频技术讲解+部署

    此资源为Itrip网站源码(2019版),资源包括:itrip需求分析讲解、网站架构流程图解析、网站核心技术难关(包括:模块调用,模块部署,涉及nginx,nexus等,前后端分离,SSO,Solr,Redis等等均内涵解析说明)。...

    电商网站商品信息爬虫.zip

    使用java+httpclient+httpcleaner,多线程、分布式爬去电商网站商品信息,数据存储在hbase上,并使用solr对商品建立索引,使用redis队列存储一个共享的url仓库;使用zookeeper对爬虫节点生命周期进行监视等。 爬虫...

    Apache_NiFi:Apache NiFi的代码,项目和参考

    这是NiFi流程: 1.)读取data.json文件2.)使用ExecuteScript处理器解析json并执行任意python处理。 3.)将属性写入json 4.)从这里,结果可以保存到简单的.json文件,HDFS,发送到Kafka,Solr等。 参考:

    java开源包1

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包11

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包2

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包3

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包6

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包5

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包10

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包4

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包8

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包7

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包9

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    java开源包101

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    Java资源包01

    使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache ...

    BnLMetsExporter:命令行界面(CLI)将METSALTO文档导出为其他格式

    此项目是使用的命令行工具,用于解析METS / ALTO文档并将其导出为另一种格式。 请注意,该项目是针对BnL的METS / ALTO要求和当前工作流程量身定制的。 要求: Java 8 Maven 数据 该程序是为卢森堡国家图书馆的...

Global site tag (gtag.js) - Google Analytics