solr对文件内容进行solr创建索引文件需要哪些jar包

14:58 提问
solr 搜索引擎如何添加pdf文档 进行索引
solr 搜索引擎如何添加pdf文档 进行索引
我试过了,可以添加pdf文件,可是只有文件的名称能搜索到,如何我要是通过文件的内容进行搜索呢,该怎么做,请各位指教
其他相似问题关于覆盖SOLR索引文件问题的最简单修改【再续】
覆盖SOLR索引文件后不能生效,一直以为是IndexWriter没有更新导致的,所以新增了一个UpdateHandler,专门用于生成新的IndexWriter。
但是,跟踪下来发现是SolrKattaServer的设计有错误。错误是:
1. SolrCore使用一个计数器来记录自己的被引用情况,只有当引用计数是0的时候才会释放占用的资源;
2. CoreContainer在拿到一个SolrCore后,使core的引用计数加1;
SolrKattaServer在获取SolrCore,退出方法前,没有使core的计数减1,导致core计数一直在1~2徘徊,从而不能释放任何资源。
具体改动代码:
&&& protected
int shardSize(String name) throws Exception {
&&& SolrCore
core = coreContainer.getCore(name);
&&& if (core ==
&&& return
RefCounted&SolrIndexSearcher&
refCounted = core.getSearcher(true, true,
&&& null);
refCounted.incref();
SolrIndexSearcher searcher = refCounted.get();
&&& return
searcher.getIndexReader().numDocs();
&&& } finally
refCounted.decref();
&&& core.close();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。基于solr的网站索引架构(一) - 灰色轨迹 - ITeye技术网站
关于solr的介绍和参数说明等,可参与网上资料。我这里就只分享下我在项目中使用solr的一些学习心得。
版本:由于使用到 中文分词IKanalry ,是solr4.0才有的新特性,所以使用solr4.0。
solr 官方地址:http://lucene.apache.org/solr/
(备注,项目使用时solr4.0正式版本还没有出来,所有我使用的solr4.0 Beta版本)
IKAnalyzer 中文分词,需要IKAnalyzer4.1.jar支持,需要在solrconfig.xml中配置jar包路径
solr的安装:
1:准备一个tomcat作为solr的服务器,将solr解压,找到dist文件中的apache-solr-4.0.0.war,拷贝到webapps目录下。
2:任意选择一个目录作为solr/home目录,solr/home里是放置你的多个core文件(可先从example\multicore下拷贝example),建立独立搜索规则。我同时在slor/home下建立了一个lib目录,用来存放IKAnalyzer的jar包和配置文件。还有solr.xml文件,最后solr/home的结构图如下:
core0,core1.core2.core3表示了我建立了4套不同的搜索规则。项目各不干扰。然后将4套搜索配置到solr.xml中,代码如下:
&cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="${jetty.port:}" zkClientTimeout="${zkClientTimeout:15000}"&
&core name="core0" instanceDir="core0" /&
&core name="core1" instanceDir="core1" /&
&core name="core2" instanceDir="core2" /&
&core name="core3" instanceDir="core3" /&
如上solr/home建立完成
3: 运行solr的方法
  1).在当前路径运行tomcat (索引文件在Solr.Home下推荐) 如:
    E:\solr-tomcat&E:\apache-tomcat-6.0.29\bin\startup.bat
   注意如果你不将apache-solr-1.4.1.war 拷贝到 tomcat的webapps 下。
   你也可以在E:\apache-tomcat-6.0.29\conf\server.xml 添加 &Context docBase="E:/apache-tomcat-6.0.29/webapps/solr.war" debug="0" path="/solr01" /&
   来告诉Tomcat 你的网站在哪里
  2).在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立localhost文件夹,在该文件夹下面建立solr.xml
    &Context docBase="D:/Tomcat7.0-solr/webapps/solr" debug="0" crossContext="true"&
&Environment name="solr/home" type="java.lang.String" value="D:/Tomcat7.0-solr/solrHome" override="true"/&
&/Context&
    然后直接双击 startup.bat 运行Tomcat 索引文件在 %Tomcat_Home%\Bin下。
docBase为操作步骤1的地址(当然如果,war被访问会自动解压为solr文件夹,就可以直接配置到solr目录下),Environment 的Value为步骤2中的solr/home目录。
  3).E:\apache-tomcat-6.0.29\webapps\solr\WEB-INF\Web.xml设置
    &env-entry&
      &env-entry-name&solr/home&/env-entry-name&
      &env-entry-value&E:/solr-tomcat/solr&/env-entry-value&
      &env-entry-type&java.lang.String&/env-entry-type&
    &/env-entry&
  然后直接双击 startup.bat 运行Tomcat 索引文件在 %Tomcat_Home%\Bin下
以上操作引子网上,我使用的是方法2)。
从solr- -4.4.0 \example\lib\ext复制所有的jar到 apache-tomcat-7.0.42 /lib下
完成以上步骤后,启动tomcat访问http://192.168.1.83:8089/solr 不出意外就已经成功启动solr服务了
solrconfig.xml文件介绍:
由于引入了IKAnalyzer的jar包,所以在solrconfig.xml也要做配置。参考solr中的其他代码,如下配置
&lib dir="../lib/" regex=".*\.jar" /& 。
schema.xml文件介绍:
配置了索引字段和内容,会和具体业务相关。
IKAnalyzer在schema.xml中配置如下(text_cn的类型将支持中文分词):
&fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100"&
&!--&analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/& --&
&analyzer type="index"&
&tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/&
&filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /&
&filter class="solr.StandardFilterFactory"/&
&filter class="solr.RemoveDuplicatesTokenFilterFactory"/&
&/analyzer&
&analyzer type="query"&
&tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/&
&filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt" enablePositionIncrements="true" /&
&filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/&
&filter class="solr.StandardFilterFactory"/&
&filter class="solr.RemoveDuplicatesTokenFilterFactory"/&
&/analyzer&
&/fieldType&
完成solr的安装和配置后,接下来就是solr索引的生成和solr在项目中的使用。嗯,再去梳理下,下一篇再贴出代码介绍。
附件为IKAnalyzer的配置
下载次数: 6
浏览: 117629 次
来自: 上海
Javakeith 写道 相当厉害!我按照LZ的配置方法,不过 ...
问下 这个&script type=&tpl& ...
现在时5.0版本了,我下载下来就说被损坏了,如果你的源代码还在 ...
yangjayup 写道${param['filter_GED ...
${param['filter_GED_push.sendTi ...1069人阅读
solr(58)
我的项目需求如下,一张数据库表是存储我们上传的文档附件的,其中有一个字段fileurl是该附件下载的连接url,要求通过dih的方式将该连接对应的文档内容索引下来。
首先在网上看了下面的三个博客文章挺有用的。
/blog/2214905
/blog/2214600
/blog/2214920&
虽然我的需求他描述的很接近,但是还是有不一样的地方的,我的url是下载的连接,而不像他在索引远程文件中那样是一个html文件,因此在选择datasource时是需要注意的。
因为在网上这样的资料挺少的,就自己根据知道的一个一个测试,最后成功的索引的文档内容。
在这里总结几点
1.索引远程文档所需要的jar请参考我提供的那三篇博客,是一样的,虽然不太了解其中一些jar包的意思,希望以后可以研究下。
不过你需要根据你的solr版本去找对应的jar包,在下载的solr中都可以找到,如solr-4.7.2\contrib\extraction\lib中就是。
在solr-4.7.2\example中有很多例子可以帮助我们学习,如solr-4.7.2\example\example-DIH\solr就有solr对不同形式的数据进行索引的例子,如网络文件,mail,db等。
2.益达在博客中写到指定依赖的jar包,而不用都将jar包放到tomcat服务器的solr项目的web-inf的lib下。
指定依赖的jar包加载路径:&lib dir=&./lib& regex=&.*\.jar&/& &
但是我在做的过程中使用这样的方式,虽然在启动solr的时候将这些jar都加在到classloader中了,但是索引文档的时候还是报class not found ,放到solr的服务器目录中,/webapps/solr/WEB-INF/lib/就可以正常的索引文档内容,在网上一直没有找到该问题出现的原因和解决方法,还希望知道原因的人帮忙指点下。
在http://blog.csdn.net/cywosp/article/details/博客中作者也遇到了这样的问题,最后也是将jar放到tomcat的服务器目录中解决的。
3.我使用的是entity嵌套的方式
&3.1子entity也是sql查询的话,如果引用父entity的变量,这个变量必须是父entity的外键,因为父子entity做的是主外键left join的查询
&3.2子entity使用其他的processor的话,引用父entity的值,则这个值不必是父entity的外键。
http://blog.csdn.net/ystyaoshengting/article/details/&博客中写到
left join:涉及到多个表之间有外键连接时,solr源码里面给我们展示的,是&entity&&/entity&里面,去引用上一层&entity&&/entity&对应表的外键:orgid='${member.mem_orgid}'。那么,我们何不直接将配置文件中的Query改为:select& distinct * from
member left join organization o on orgid = mem_orgid。这样就可以不用分层,把所有&field&&/field&定义到一块了。这样是可行的,只是效率还是个未知数。不过推荐分层的&entity&&/entity&,逻辑清楚。
最后上传下我自己写的data-config.xml的配置,scheme.xml和solrconfig.xml配置就不说了,挺简单的。
& &dataConfig&
&!--从本地索引的,可以使用
&dataSource name=&fileDataSource& type=&FileDataSource& /&
&dataSource name=&urlDataSource& type=&BinURLDataSource& /&
&document&
&entity name=&files& dataSource=&null& rootEntity=&false&
processor=&FileListEntityProcessor&
baseDir=&c:/docs& fileName=&.*\.(doc)|(pdf)|(docx)|(txt)&
onError=&skip&
recursive=&true&&
&field column=&fileAbsolutePath& name=&fileurl& /&
&entity processor=&PlainTextEntityProcessor& name=&txtfile& url=&${files.fileAbsolutePath}& dataSource=&fileDataSource&&
&field column=&plainText& name=&text&/&
&/document&
&!--索引网络文章,可以使用
&dataSource name=&urlDataSource& type=&URLDataSource& /&
&document&
&entity processor=&PlainTextEntityProcessor& name=&onlineTxtFile& url=&/ump/QueryPatchDetailedServlet?PK=0002UW21& dataSource=&urlDataSource&&
&field column=&plainText& name=&text&/&
&/document&
&!--从本地索引pdf文件,可以使用
&dataSource name=&binFileDataSource& type=&BinFileDataSource& /&
&document&
&entity name=&tika-test& processor=&TikaEntityProcessor&
url=&C:/docs/solr-word.pdf& format=&text&&
&field column=&Author& name=&filename& meta=&true&/&
&field column=&title& name=&fileurl& meta=&true&/&
&field column=&text& name=&text&/&
&/document&
&!--使用URLDataSource可以网络上的页面文章等索引下来,但是对于我们的应用中url是下载的连接,这样索引下来的是流,而不是内容--&
&dataSource name=&urlDataSource& type=&URLDataSource&/&
&!--BinFileDataSource需要指定的是文件的路径,但是我们的应用中给的是下载的连接,这两者不太一样,使用这个数据源的时候会报file not found--&
&dataSource name=&binFileDataSource& type=&BinFileDataSource& /&
&!--符合我们项目需求的dih导入附件内容进行索引,可以使用--&
&dataSource name=&binURLDataSource& type=&BinURLDataSource& /&
&dataSource name=&oracle& type=&JdbcDataSource& driver=&oracle.jdbc.driver.OracleDriver&
url=&jdbc:oracle:thin:@20.10.130.160:1521:orcl& user=&caiwu63& password=&1&/&
&document name=&filedocument&&
&entity pk=&FILEURL& dataSource=&oracle& name=&files&
query=&select uft.filename as filename,uft.fileurl as FILEURL from ump_fastdfs_test uft &&
&field column=&filename&
name=&filename& /&
&field column=&FILEURL&
name=&fileurl& /&
&!--这里子entity引用父entity的变量fileurl,这个变量可以不是父entity的外键,因为父子entity不是做的left join查询--&
&entity processor=&TikaEntityProcessor& name=&onlineTxtFile& url=&${files.FILEURL}& dataSource=&binURLDataSource& format=&text&&
&field column=&Author& name=&author& meta=&true&/&
&field column=&title&
name=&title& meta=&true&/&
&field column=&text&
name=&text&/&
&!--这里子entity引用父entity的变量fileurl,这个变量必须是父entity的外键,因为父子entity做的是left join查询--&
&entity name=&comment&
query=&select uft.fileurl as fileurl2 from ump_fastdfs_test uft where uft.fileurl = '${files.FILEURL}' &&
&field column=&fileurl2&
name=&fileurl2& /&
&/document&
&/dataConfig&
大家也可以参考http://wiki.apache.org/solr/官方文档对datasource及entity的processor的讲解,很有帮助。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:602141次
积分:6700
积分:6700
排名:第2855名
原创:96篇
转载:340篇
评论:50条
(2)(1)(3)(1)(4)(2)(24)(20)(22)(22)(14)(27)(38)(47)(4)(15)(7)(6)(5)(2)(3)(1)(1)(1)(1)(2)(18)(2)(7)(1)(1)(2)(1)(3)(3)(2)(2)(2)(2)(2)(3)(13)(2)(4)(6)(4)(22)(18)(12)(34)(1)

我要回帖

更多关于 solr对word文件索引 的文章

 

随机推荐