简介
solr可以对文件数据进行解析,提取可索引内容进行建立索引,底层实现是依赖apache Tika的,Tika利用现有的解析类库,从不同格式的文档中(例如HTML,PDF,Doc),侦测和提取出元数据和结构化内容,然后交由solr建立索引。
添加文件数据索引例子
首先要保证你的solr版本在1.4以上,然后进入到进入到文件所在的目录,然后使用curl命令,把文件数据添加到solr中即可。
cd site/html curl "http://localhost:8080/solr/update/extract?literal.id=doc1&commit=true" -F "[email protected]"
从发送的请求中我们可以看到请求的uri为/update/extract,回顾一下前面讲解提到的SolrRequestHandler,我们从solrconfig.xml文件中找到如下配置。
喜欢钻研的同学就可以看看ExtractingRequestHandler实现。
<requestHandler name="/update/extract" startup="lazy" class="solr.extraction.ExtractingRequestHandler" > <lst name="defaults"> <str name="lowernames">true</str> <str name="uprefix">ignored_</str> <!-- capture link hrefs but ignore div attributes --> <str name="captureAttr">true</str> <str name="fmap.a">links</str> <str name="fmap.div">ignored_</str> </lst> </requestHandler>
另外,细心的同学可以看到提交的url中还有一个参数commit=ture。这个参数是用来告诉solr,是否提交索引,如果你是批量文件数据,应该等所有的文件都上传了再传这个commit=ture的参数,一起更新索引。
现在你就可以使用http://localhost:8080/solr/select?q=tutorial来搜索刚才提交的数据了。
添加的过程中,可能会报错:lazy loading error,这个报错是由于SOLR_HOME/collection1\confs/olrconfig.xml文件的如下配置没有找到对应的lib目录
<lib dir="../../../contrib/extraction/lib" regex=".*\.jar" /> <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" /> <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" /> <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" /> <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" /> <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" /> <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" /> <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />
把需要的lib文件目录拷贝到这个相对路径下即可,或者直接指定绝对路径也可以,这些lib目录可以在solr解压的包的根目录下找到。
使用solrj添加
当然,在平时开发中我们比较少使用命令的方式提交数据,下面为大家讲解一下怎么使用solrj提交文件数据。沿用上面的例子,代码非常简单,server对象的说明请参考前面的章节。
ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract"); up.addFile(new File("tutorial.html"),"text/html"); up.setParam("literal.id", "testSolrHtml001"); up.setAction(org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION.COMMIT, true, true); NamedList<Object> result = server.request(up);
7.跟我学solr---对文件数据添加索引