一、准备数据
1.去官网下载最新的solr。当前最新为4.5版本。
2.准备tomcat7.(下载tomcat7)
二、配置solr。
1.将下载的solr4.5解压得到:
2.将example\solr-webapp 下的solr.war 放到tomcat的webapp下。
3.启动tomcat 此时报错,solr.war 解压关闭tomcat 删除solr.war
4.得到solr 项目
5.配置solr_home :将下载的solr包中解压的example/solr 文件夹copy到d:/solr/solr_home(路径可以任意修改)。
6.打开tomcat下的webapp\solr\WEB-INF 下的web.xml,修改添加如下代码:
7.其中
8.copy 下载包中的example\lib\ext 下的jar包全部放到tomcat 的lib 目录下。
9设置solr/collection/conf/中的solrconfig.xml 中jar包路径,将路径该对就可以了。
10.将C:\app\solr-4.5.0\solr-4.5.0\example\resources下的
log4j.properties拷贝到C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\solr\WEB-INF\classes下。
11.启动tomcat。访问看到以下页面说明部署成功。
solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器。
一、版本信息
solr版本:4.7.0
需要ik-analyzer版本:IK Analyzer 2012FF_hf1
ik-analyzer下载地址:https://www.sodocs.net/doc/c116524735.html,/p/ik-analyzer/downloads/list
二、配置步骤
下载压缩解压后得到如下目录结构的文件夹:
我们把IKAnalyzer2012FF_u1.jar拷贝到solr服务的solr\WEB-INF\lib下面。
我们把IKAnalyzer.cfg.xml、stopword.dic拷贝到需要使用分词器的core的conf下面,和core的schema.xml文件一个目录。
修改core的schema.xml,在
[html]view plaincopy
1.
2.
3.
我们就多了一种text_ik的field类型了,该类型使用的分词器就是ik-analyzer。
我们在这个core的schema.xml里面配置field类型的时候就可以使用text_ik了。
[html]view plaincopy
1. iValued="false"/> 三、中文分词测试 [html]view plaincopy 1.IKT 2. 3.text 4.raw_bytes 5.start 6.end 7.type 8.position 9. 10.中华人民共和国 11.[e4 b8 ad e5 8d 8e e4 ba ba e6 b0 91 e5 85 b1 e5 92 8c e5 9b bd] 12.0 13.7 https://www.sodocs.net/doc/c116524735.html,_WORD 15.1 16. 17.中华人民 18.[e4 b8 ad e5 8d 8e e4 ba ba e6 b0 91] 19.0 20.4 https://www.sodocs.net/doc/c116524735.html,_WORD 22.2 23. 24.中华 25.[e4 b8 ad e5 8d 8e] 26.0 27.2 https://www.sodocs.net/doc/c116524735.html,_WORD 29.3 30. 31.华人 32.[e5 8d 8e e4 ba ba] 33.1 34.3 https://www.sodocs.net/doc/c116524735.html,_WORD 36.4 37. 38.人民共和国 39.[e4 ba ba e6 b0 91 e5 85 b1 e5 92 8c e5 9b bd] 40.2 41.7 https://www.sodocs.net/doc/c116524735.html,_WORD 43.5 44. 45.人民 46.[e4 ba ba e6 b0 91] 47.2 48.4 https://www.sodocs.net/doc/c116524735.html,_WORD 50.6 51. 52.共和国 53.[e5 85 b1 e5 92 8c e5 9b bd] 54.4 55.7 https://www.sodocs.net/doc/c116524735.html,_WORD 57.7 58. 59.共和 60.[e5 85 b1 e5 92 8c] 61.4 62.6 https://www.sodocs.net/doc/c116524735.html,_WORD 64.8 65. 66.国 67.[e5 9b bd] 68.6 69.7 https://www.sodocs.net/doc/c116524735.html,_CHAR 71.9 二、导入Pdf,word 索引数据源并不会一定来自于数据库、XML、JSON、CSV这类结构化数据,很多时候也来自于PDF、word、html、word、MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提供了很好的支持,利用的是apache tika。 下面我们来看看在solr4.7中如何从pdf文件创建索引。 一、配置文件索引库 1、新建core(可以与关系型数据库同一个core,收索用“attr_content:下载”) 我们新建一个solr的core,用于存储文件型索引,新建core的步骤请参考: https://www.sodocs.net/doc/c116524735.html,/clj198606061111/article/details/21288499 2、准备jar 我们在$solr_home下面新建一个extract文件夹,用于存放solr扩展jar包。 从colr4.7发布包中solr-4.7.0\dist拷贝solr-cell-4.7.0.jar到新建的extract文件夹下。拷贝solr4.7发布包solr-4.7.0\contrib\extraction\lib下所有jar包到extract文件夹下。 3、配置solrconfig.xml 添加请求解析配置: [html]view plaincopy 1. 2. 3. 4. 5. 6. 7. 8. 指定依赖包位置: 注意,这个相对位置不是相对于配置文件所在文件夹位置,而是相对core主目录的。比如我的配置文件在solr_home\core1\conf,但是我的jar包在solr_home\ extract那么我的相对路径就是../extract而不是../../extract。 [html]view plaincopy 1. 4、配置schema.xml 4.1配置索引字段的类型,也就是field类型。 其中text_general类型我们用到2个txt文件(stopwords.txt、synonyms.txt),这2个txt 文件在发布包示例core里面有位置在:solr-4.7.0\example\solr\collection1\conf,复制这2个txt文件到新建的$solr_home的那个新建的core下面的conf目录下,和schema.xml一个位置。 [html]view plaincopy 1. 2. onIncrementGap="0"/> 3. tNorms="true"/> 4. ="100"> 5. 6. 7. 8. 9. 10. 11. 12. 13. oreCase="true"expand="true"/> 14. 15. 16. 17. 4.2配置索引字段,也就是field 其中有个动态类型字段,attr_*,这个是什么意思呢。也就是solr在解析文件的时候,文件本身有很多属性,具体有哪些属性是不确定的,solr全部把他解析出来以attr作为前缀加上文件本身的属性名,组合在一起就成了field的名称 [html]view plaincopy 1. ultiValued="false"required="true"/> 2. 3. 4. 5. 到这里solr服务端的配置以及完成了。 二、solrj测试 1、需要的jar Maven配置 [html]view plaincopy 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 2、测试类CreateIndexFromPDF.java Solrj4.7里面ContentStreamUpdateRequest的addFile方法多了一个contentType参数,指明内容类型。ContentType请参看: https://www.sodocs.net/doc/c116524735.html,/link?url=panQQa04z0gc4-gQRnIoUhwOQPABfG6unIqE1-7SEe5Z MygYxWT2lkvoKlQmTEYIZDNhntB4T9aGQM5KhevKDa [java]view plaincopy 1.package com.clj.test.solr.solrj; 2. 3.import java.io.File; 4.import java.io.IOException; 5. 6.import org.apache.solr.client.solrj.SolrQuery; 7.import org.apache.solr.client.solrj.SolrServer; 8.import org.apache.solr.client.solrj.SolrServerException; 9.import org.apache.solr.client.solrj.impl.HttpSolrServer; 10.import org.apache.solr.client.solrj.request.AbstractUpdateRequest; 11.import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; 12.import org.apache.solr.client.solrj.response.QueryResponse; 13. 14./** 15. * 从PDF创建索引 16. * <功能详细描述> 17. * 18. * @author Administrator 19. * @version [版本号, 2014年3月18日] 20. * @see [相关类/方法] 21. * @since [产品/模块版本] 22. */ 23.public class CreateIndexFromPDF 24.{ 25. 26.public static void main(String[] args) 27. { 28. String fileName = "e:/MyBatis3用户指南中文版.pdf"; 29. String solrId = "MyBatis3用户指南中文版.pdf"; 30.try 31. { 32. indexFilesSolrCell(fileName, solrId); 33. } 34.catch (IOException e) 35. { 36. e.printStackTrace(); 37. } 38.catch (SolrServerException e) 39. { 40. e.printStackTrace(); 41. } 42. 43. } 44. 45./** 从文件创建索引 46. * <功能详细描述> 47. * @param fileName 48. * @param solrId 49. * @see [类、类#方法、类#成员] 50. */ 51.public static void indexFilesSolrCell(String fileName, String solrId) 52.throws IOException, SolrServerException 53. { 54. String urlString = "http://localhost:8080/solr/core1"; 55. SolrServer solr = new HttpSolrServer(urlString); 56. ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/upd ate/extract"); 57. 58. String contentType="application/pdf"; 59. up.addFile(new File(fileName), contentType); 60. up.setParam("literal.id", solrId); 61. up.setParam("uprefix", "attr_"); 62. up.setParam("fmap.content", "attr_content"); 63. up.setAction(https://www.sodocs.net/doc/c116524735.html,MIT, true, true); 64. 65. solr.request(up); 66. 67. QueryResponse rsp = solr.query(new SolrQuery("*:*")); 68. System.out.println(rsp); 69. } 70. 71.} 执行上面代码,便把我们的pdf文件上传到solr服务器,解析、创建索引,后面的solr.query 是执行一个查询,查询解析索引后结果。解析后pdf就变成了纯文本的内容,在控制台可以看到很多文档其他信息。 Solr解析完pdf、创建索引后,我们也可以在solr的管理界面查看索引结果。Core1s就是我们新建的文件索引库。如下图。 版权声明:本文为博主原创文章,未经博主允许不得转载。