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** 是 Apache 软件基金会旗下的顶级开源项目之一,它是一款高性能的全文检索服务器。Solr 基于 Java 开发,利用 Lucene 作为其核心搜索引擎库。 - **特点**: - 可扩展性...
#### 三、Solr创建索引流程 1. **建立SolrServer连接** - 使用`CommonsHttpSolrServer`类创建Solr服务器连接。 - 设置必要的参数,如URL、超时时间、最大连接数等。 2. **添加文档** - 创建一个...
《Spring Data Solr深度解析与实战指南》 Spring Data Solr是Spring Data项目的一个子模块,专门用于简化Apache Solr的集成。它提供了一种声明式的方式来操作Solr,使得在Java应用程序中处理Solr查询变得更为简洁。...
- **处理查询结果**:解析`QueryResponse`对象获取查询结果。 示例代码如下: ```java SolrQuery query = new SolrQuery("*:*"); QueryResponse response = server.query(query); SolrDocumentList docs = ...
Solr提供丰富的查询语法,包括布尔运算、短语匹配、范围查询等,还支持自定义查询解析器和函数查询,以实现复杂的查询逻辑。 1.2.4 核心 在Solr中,每个独立的搜索服务实例被称为一个“核心”(Core),每个核心...
用户可以自定义查询解析器、过滤器、排序函数、结果组策略等,以满足特定需求。 7. **分析链**:Solr的分析链允许用户自定义输入数据的预处理过程,如分词、标准化和过滤,这在处理不同语言和文本格式时非常有用。 ...
### Solr创建索引的原理及解析 #### 一、Solr概述与索引机制 Apache Solr是一款基于Lucene的高性能全文检索服务器,广泛应用于网站的搜索功能中。Solr支持分布式部署,并且提供了丰富的API接口,方便与其他系统...
### Lucene与Solr的使用详解 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,由Java语言编写而成。它能够为应用系统提供强大的全文检索能力,是当前最为流行的开源搜索库之一。由于其高度可...
本文将深入探讨Solr6工具类的使用方法,包括条件查询、结果高亮,并结合测试对象和测试类进行详细解析。 1. **SolrJ简介** SolrJ提供了一组接口和类,使得开发者能够轻松地创建、发送和解析Solr请求。它通过...
Solr提供了许多内置的分析器,如StandardAnalyzer,同时也支持自定义分析流程。 **自定义开发** 理解源代码可以帮助开发者根据需求定制分析器、过滤器和查询处理器,以满足特定的搜索需求。例如,你可以创建新的...
6. 处理结果:解析Solr返回的XML或JSON响应,获取并展示查询结果。 此外,SolrPhpClient可能还提供了处理错误、优化索引、提交事务等功能,帮助开发者更高效地管理和维护Solr数据。在使用过程中,开发者需要注意...
通过分析这个源码包,开发者可以学习到如何配置和扩展Solr,理解Solr内部的工作流程,例如请求处理、查询解析、索引构建和优化、以及集群管理等。此外,对于想要为Solr贡献代码的开发者,源码包也是一个宝贵的资源,...
### Solr教材知识点详解 #### 一、概述 **1.1 企业搜索引擎方案选型** 在企业级应用中,为了提升用户体验并更好地处理大量数据的检索需求,选择合适的搜索引擎解决方案至关重要。通常有几种常见的方案: 1. **...
1. **Solr核心概念**:Solr的核心组件包括索引、查询解析、排序、高亮显示、分面搜索等。索引是存储和检索文档的主要方式,它通过分词、建立倒排索引来实现高效搜索。查询解析将用户输入的查询语句转化为Solr可以...
7. **改进的Query解析**:Solr 7.6.0改进了查询语法,支持更复杂的查询构造,例如函数查询、地理位置查询和多字段查询。 8. **安全与权限控制**:Solr内置了Zookeeper为基础的权限控制机制,7.6.0版本中,安全配置...
2. 查询处理:客户端发送请求,Solr 服务器解析查询,应用查询条件,返回匹配的文档。 3. 结果排名:根据相关性评分算法,对搜索结果进行排序。 4. 高级特性:支持 faceting(分面搜索)、highlighting(高亮显示)...
- **安装过程**: 本节详细介绍了 Solr 的安装和设置流程,包括但不限于环境配置、依赖库的安装等基础步骤。 #### 三、Solr Web 管理界面使用 - **管理界面**: 通过浏览器访问 Solr 提供的 Web 基础管理界面,可以...
4. **插件系统**:Solr的灵活性很大程度上归功于其强大的插件机制,允许用户自定义处理流程,如请求处理器、查询解析器、过滤器和排序器。 5. **更新处理程序**:Solr支持实时更新,这意味着当新的文档被添加、删除...