solr 5.3.1 源码 阅读 - 2

Solr5.3.1流程整理 2 
 


1. 主要的action
/$[new_core]/update/extract, /$[new_core]/update/,
其中$[new_core],为实际的core


2. 配置文件 conf/solrconfig.xml 中,对应以下
<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler">
<lst name="defaults">
<str name="lowernames">true</str>
<str name="fmap.meta">ignored_</str>
<str name="fmap.content">_text_</str>
</lst>
</requestHandler>


源文件位置:
solr/contrib/extraction/src/java/org/apache/solr/handler/extraction/ExtractingRequestHandler.java


3. 主Servlet — SolrDispatchFilter,


abstract interface javax.servlet.Filter ...
public abstract void init(FilterConfig arg0) throws ServletException;
public abstract void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws...
public abstract void destroy();


abstract class BaseSolrFilter implements Filter ...
只包含了一个static  静态代码块 (日志配置 相关)


SolrDispatchFilter extends BaseSolrFilter ...


public void init(FilterConfig config) ...
|-> o.a.s.c.CoreContainer
cores = new CoreContainer(nodeConfig, extraProperties, true);
cores.load();
|-> org.apache.solr.handler.component.HttpShardHandlerFactory
|-> org.apache.solr.update.UpdateShardHandler
|-> zkSys.initZooKeeper(this, solrHome, cfg.getCloudConfig());
|-> o.a.s.c.CoresLocator


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) ...
|-> HttpSolrCall call = getHttpSolrCall(...
|-> Action result = call.call();
|-> private void init() throws...
|-> handler = cores.getRequestHandler(path);


public void destroy() {...
|-> cores.shutdown();
DirectUpdateHandler2
SolrCoreState
CachingDirectoryFactory
NRTCachingDirectoryFactory 
ContextHandler




4. 类继承关系
SolrInfoMBean                                                     interface
SolrRequestHandler extends SolrInfoMBean
RequestHandlerBase implements SolrRequestHandler, SolrInfoMBean, NestedRequestHandler
ContentStreamHandlerBase extends RequestHandlerBase
ExtractingRequestHandler extends ContentStreamHandlerBase implements SolrCoreAware


主要方法:
interface SolrRequestHandler


public void handleRequest(SolrQueryRequest req, SolrQueryResponse rsp);


abstract class RequestHandlerBase implements SolrRequestHandler...


public abstract void handleRequestBody( SolrQueryRequest req, SolrQueryResponse rsp ) throws Exception;


public void handleRequest(SolrQueryRequest req, SolrQueryResponse rsp) {...
|-> handleRequestBody( req, rsp );




5. 数据相关的方法
abstract class ContentStreamHandlerBase extends RequestHandlerBase ...


public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {...
|-> ContentStreamLoader documentLoader = newLoader(req, processor);
|-> documentLoader.load(req, rsp, stream, processor);


ExtractingRequestHandler extends ContentStreamHandlerBase ...


protected ContentStreamLoader newLoader(SolrQueryRequest req, UpdateRequestProcessor processor) {...
|-> new ExtractingDocumentLoader(req, processor, config, factory);


以上可以看到,在重载的handler中,创建了与之相关的Document类, 并且由这个类的load方法,具体处理输入的content


接下来,需要看一下这个文档的loader具体做了哪些。
abstract class ContentStreamLoader ...


  public abstract void load(SolrQueryRequest req, 
      SolrQueryResponse rsp, 
      ContentStream stream, 
      UpdateRequestProcessor processor) throws Exception;


ExtractingDocumentLoader extends ContentStreamLoader ...


public void load(SolrQueryRequest req, SolrQueryResponse rsp, ...




主要被调用的方法有:(准备以后详细分析)
1)
SolrContentHandler handler = factory.createSolrContentHandler(metadata, params, req.getSchema());
ContentHandler parsingHandler = handler;




2)
parser.parse(inputStream, parsingHandler, metadata, context);




tika-core-1.7.jar (以前是lucene的一个子项目)
org.apache.tika.parser.Parser




3)
addDoc(handler);
|-> processor.processAdd(template);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solr码在MyEclipse下的搭建 1. 下载并按装Ant 下载地址: http://ant.apache.org/bindownload.cgi Ant环境变量配置: ANT_HOME: E:\Program Files\apache-ant-1.9.0 Path: %ANT_HOME%\bin 在cmd中输入ant -v, 有下图结果表示成功安装 2. 下载Solr码 下载地址: http://lucene.apache.org/solr/mirrors-solr-latest-redir.html 3. 用Ant把Solr码转换为MyEclipse Web项目 进入Solr码的根目录 在cmd中输入ant eclipse, 按回车后你将会看到如下画面, 如果你的c:\Users\用户名\.ant\lib下没有ivy jar包的话 此时你按它说的那样需输入ant ivy-bootstrap命令下载ivy, 当然你也可以直接吧ivy jar包直接放入c:\Users\用户名\.ant\lib下 下好后再输入刚才的ant eclipse命令,回车后你会看到一堆信息,此时表明ant已经再帮你生成项目了。期间会等一段时间,在这期间也可能会出现fault信息,而且就是它可能造成你很久都看不到成功生成,在我目前遇到的情况下的解决办法是,再输入一遍命令,之后就看你的点了,或者你有更好的解决办法。 4. 把Eclipse普通项目转化为web项目 如果是Eclipse可以看考百度。这里只介绍MyEclipse的转化方法。 1. 在项目根目录下创建一个WebRoot文件夹 2. 找一个MyEclipse Web项目,把.project文件中的<buildSpec>...</buildSpec>和<natures>...</natures>标签中的内容复制到生成的项目中的.project文件中。 3. 找到Web项目中的.mymetadata文件,看看里面的内容,就知道怎么回事了。 4. 求改项目编译结果的存放地址,找到"<classpathentry kind="output"..."部分,修改path的值为WebRoot/WEB-INF/classes,这样就可以跑自己的代码了。 5. 配置Solr运行环境 1. 把solr.war(solr-4.2.0\example\solr-webapp\solr.war)里的东西全复制到WebRoot下 2. 创建solr/home, 把solr-4.2.0\example\solr所有文件复制到你创建的solr/home目录下 3. 创建JNDI让程序找到solr/home(当然你也可以用System Properties方式), 在WebRoot/META-INF目下创建context.xml 文件,并写入以下字符 <?xml version='1.0' encoding='utf-8'?> <Context> <Environment name="solr/home" type="java.lang.String" value="E:\Solr" override="true" /> </Context> 注:value对应地址即你创建的solr/home目录地址 4. 部署到tomcat,开始Solr

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值