`
13shu
  • 浏览: 73028 次
  • 性别: 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);
  }

 

 

分享到:
评论

相关推荐

    solr开发详解

    ### Solr开发详解 #### Solr简介 - **Solr** 是 Apache 软件基金会旗下的顶级开源项目之一,它是一款高性能的全文检索服务器。Solr 基于 Java 开发,利用 Lucene 作为其核心搜索引擎库。 - **特点**: - 可扩展性...

    solr创建索引并查询

    #### 三、Solr创建索引流程 1. **建立SolrServer连接** - 使用`CommonsHttpSolrServer`类创建Solr服务器连接。 - 设置必要的参数,如URL、超时时间、最大连接数等。 2. **添加文档** - 创建一个...

    spring-data-solr-master

    《Spring Data Solr深度解析与实战指南》 Spring Data Solr是Spring Data项目的一个子模块,专门用于简化Apache Solr的集成。它提供了一种声明式的方式来操作Solr,使得在Java应用程序中处理Solr查询变得更为简洁。...

    solr

    - **处理查询结果**:解析`QueryResponse`对象获取查询结果。 示例代码如下: ```java SolrQuery query = new SolrQuery("*:*"); QueryResponse response = server.query(query); SolrDocumentList docs = ...

    SOLR的应用教程

    Solr提供丰富的查询语法,包括布尔运算、短语匹配、范围查询等,还支持自定义查询解析器和函数查询,以实现复杂的查询逻辑。 1.2.4 核心 在Solr中,每个独立的搜索服务实例被称为一个“核心”(Core),每个核心...

    Apache Solr(solr-8.11.1.zip)

    用户可以自定义查询解析器、过滤器、排序函数、结果组策略等,以满足特定需求。 7. **分析链**:Solr的分析链允许用户自定义输入数据的预处理过程,如分词、标准化和过滤,这在处理不同语言和文本格式时非常有用。 ...

    solr创建索引的原理及解析

    ### Solr创建索引的原理及解析 #### 一、Solr概述与索引机制 Apache Solr是一款基于Lucene的高性能全文检索服务器,广泛应用于网站的搜索功能中。Solr支持分布式部署,并且提供了丰富的API接口,方便与其他系统...

    lucene,solr的使用

    ### Lucene与Solr的使用详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它能够为应用系统提供强大的全文检索能力,是当前最为流行的开源搜索库之一。由于其高度可...

    solr6工具类

    本文将深入探讨Solr6工具类的使用方法,包括条件查询、结果高亮,并结合测试对象和测试类进行详细解析。 1. **SolrJ简介** SolrJ提供了一组接口和类,使得开发者能够轻松地创建、发送和解析Solr请求。它通过...

    solr4.3源代码一

    Solr提供了许多内置的分析器,如StandardAnalyzer,同时也支持自定义分析流程。 **自定义开发** 理解源代码可以帮助开发者根据需求定制分析器、过滤器和查询处理器,以满足特定的搜索需求。例如,你可以创建新的...

    php与solr交互扩展库包

    6. 处理结果:解析Solr返回的XML或JSON响应,获取并展示查询结果。 此外,SolrPhpClient可能还提供了处理错误、优化索引、提交事务等功能,帮助开发者更高效地管理和维护Solr数据。在使用过程中,开发者需要注意...

    solr-4.5源码包

    通过分析这个源码包,开发者可以学习到如何配置和扩展Solr,理解Solr内部的工作流程,例如请求处理、查询解析、索引构建和优化、以及集群管理等。此外,对于想要为Solr贡献代码的开发者,源码包也是一个宝贵的资源,...

    solr教材-PDF版

    ### Solr教材知识点详解 #### 一、概述 **1.1 企业搜索引擎方案选型** 在企业级应用中,为了提升用户体验并更好地处理大量数据的检索需求,选择合适的搜索引擎解决方案至关重要。通常有几种常见的方案: 1. **...

    solr项目和相关资源.rar

    1. **Solr核心概念**:Solr的核心组件包括索引、查询解析、排序、高亮显示、分面搜索等。索引是存储和检索文档的主要方式,它通过分词、建立倒排索引来实现高效搜索。查询解析将用户输入的查询语句转化为Solr可以...

    solr-7.6.0.zip

    7. **改进的Query解析**:Solr 7.6.0改进了查询语法,支持更复杂的查询构造,例如函数查询、地理位置查询和多字段查询。 8. **安全与权限控制**:Solr内置了Zookeeper为基础的权限控制机制,7.6.0版本中,安全配置...

    最新版linux solr-8.5.2.tgz

    2. 查询处理:客户端发送请求,Solr 服务器解析查询,应用查询条件,返回匹配的文档。 3. 结果排名:根据相关性评分算法,对搜索结果进行排序。 4. 高级特性:支持 faceting(分面搜索)、highlighting(高亮显示)...

    Solr6.2官方版参考手册

    - **安装过程**: 本节详细介绍了 Solr 的安装和设置流程,包括但不限于环境配置、依赖库的安装等基础步骤。 #### 三、Solr Web 管理界面使用 - **管理界面**: 通过浏览器访问 Solr 提供的 Web 基础管理界面,可以...

    最新版linux solr-8.10.0.tgz

    4. **插件系统**:Solr的灵活性很大程度上归功于其强大的插件机制,允许用户自定义处理流程,如请求处理器、查询解析器、过滤器和排序器。 5. **更新处理程序**:Solr支持实时更新,这意味着当新的文档被添加、删除...

Global site tag (gtag.js) - Google Analytics