2 SOLR2:SOLR整合TOMCAT+导入数据并创建索引+solrj操作
来源:互联网 发布:生活垃圾的数据 编辑:程序博客网 时间:2024/06/06 04:07
【标题:solr整合TOMCAT+导入数据并创建索引+solrj操作】
【说明:这里是我这两天学习solr的一个整理,有很多不详细的地方,但是都可以在网上找到!】
一 solr整合tomcat:1 下载solr:http://lucene.apache.org/solr/,解压(不同版本解压得到的文件夹可能不一样,我用的是solr4.10.1)
2 把solr客户端(注意这里是客户端)部署到TOMCAT:将solr-4.10.0\example\webapps\solr.war 到 apache-tomcat-8.0.12\webapps\目录中
3 建立solr的core
(1)core:Solr里面的core就像数据库里面的一个表,用来管理索引和相关配置(2)最简单的办法是:
直接把solr-4.10.1\example\solr全部拷贝过去就行,例如放到D:\solr\...,这样solr的core就建好了
目录如下图:
(3)solr建好了后,要告诉solr客户端core在哪里,配置tomcat中你发布的solr项目(solr.war解压生成的或者tomcat启动解析生成的),找到下面这一段,打开注释,红色部分修改为你的core的路径就行:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>E:/apache-tomcat-6.0.39/bin/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
二 导入数据并创建索引(索引就是filed):数据库(以oracle为例)和文件(以pdf为例)
(一)导入oracle数据库并创建索引:
1 导入3个jar包到tomcat solr客户端WEB-INF中的lib:
(1)solr-dataimporthandler-extras-4.7.0.jar;在solr发布包solr-4.7.0\dist里面有
(2)solr-dataimporthandler-4.7.0.jar;在solr发布包solr-4.7.0\dist里面有
(3)oracle的驱动jar包
2 告诉solr的core我配置了一个数据库源
(1)修改core里面的solrConfig.xml:
- <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
- <lst name="defaults">
- <str name="config">data-config.xml</str>
- </lst>
- </requestHandler>
(2)新建data-config.xml(在core里面的conf文件夹里新建,与solr一个目录),其中有一些中文注释请好好读一下:
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:heer_oa_dev/heerok@59.173.240.149:1521:heer" user="heer_oa_dev" password="heerok"/> <document> <entity name="OA_SETTING" query="SELECT ID,SJ,SZ,SCRQ from OA_SETTING"> <field column="ID" name="id" /> <!-- 1 column与数据库中的对应 2这里的name一定要在schema.xml中的filed中定义,我这里用的dynamicField --> <field column="SJ" name="sj_s" /> <!-- 最后的查询结果的列的显示: 1 query和filed中都有的字段才会被查出来 2 字段名称是name的值 --> <field column="SZ" name="sz_s" /> <field column="SCRQ" name="scrq_dt" /> </entity> </document> </dataConfig>
(3)修改schema.xml(这里有所有的字段,对应着data-config.xml里面的name,里面的_s _dt都是dynamicField),schema.xml中的filed就是索引的字段,filedType是索引字段的类型,下面给一个日期类型的例子:
<dynamicField name="*_dt" type="date" indexed="true" stored="true"/>
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
(二)导入文件并创建索引,以PDF为例子
1 导入jar包:
(1)在core下面新建文件夹extract,把solr-4.7.0\contrib\extraction\lib下所有jar包到extract文件夹下
(2)把solr-4.10.1/dist和solr-4.10.1/contrib都直接拷贝到core下面去,最后的结果如下图所示
说明:为什么要把这么多的jar包都拷贝过去,用于solrconfig.xml中的lib,如果没有导入这些jar包的话,在后面用sorlj操作的时候会报classnotfound的错误(如果你仔细的话会发现里面有很多重复的jar包,你可以直接找出来然后把jar包都放到extra文件夹中)
(3)修改solrConfig.xml:
这里配置的uprefix的意思是:
也就是solr在解析文件的时候,文件本身有很多属性,具体有哪些属性是不确定的,solr全部把他解析出来以attr作为前缀加上文件本身的属性名。这个attr_就是索引了,也就是字段,所以在schema中也要配置。
- <requestHandler name="/update/extract" class="solr.extraction.ExtractingRequestHandler" >
- <lst name="defaults">
- <str name="fmap.content">text</str>
- <str name="lowernames">true</str>
- <str name="uprefix">attr—</str> (attr_)
- <str name="captureAttr">true</str>
- </lst>
- </requestHandler>
(这里原来是../../)
<lib dir="E:\apache-tomcat-6.0.39\bin\solr\extract" regex=".*\.jar" />
<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" />
(突然看到还有下面这个地方要改,漏掉了,data下面放的是索引文件的二进制文件)
<dataDir>${solr.data.dir:E:/apache-tomcat-6.0.39/bin/solr/collection1/data}</dataDir>
(4)这个attr_就是索引了,也就是字段field,所以也需要在schema.xml中配置:
<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
三 用solrj操作:这里没有用Junit,直接写的main
package com.heer;import java.io.File;import java.io.IOException;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrServer;import org.apache.solr.client.solrj.request.AbstractUpdateRequest;import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.apache.solr.common.params.ModifiableSolrParams;import org.apache.solr.common.params.SolrParams;public class SolrExample {private static SolrServer server = new HttpSolrServer("http://localhost:8080/solr/");public final static void fail(Object o) {System.out.println(o);}public static void query(String query) {SolrParams params = new SolrQuery(query);try {QueryResponse response = server.query(params);SolrDocumentList list = response.getResults();for (int i = 0; i < list.size(); i++) {fail(list.get(i));}} catch (SolrServerException e) {e.printStackTrace();}}public static void addDoc() {SolrInputDocument doc = new SolrInputDocument();doc.addField("id", 1);doc.addField("name","Solr Input Document");doc.addField("manu", "this is SolrInputDocument content");doc.addField("mytest","my test solr Solr");try {// 添加一个doc文档UpdateResponse response = server.add(doc);fail("server.commit(): "+server.commit());// commit后才保存到索引库fail("response: "+response);fail("query time:" + response.getQTime());fail("Elapsed Time:" + response.getElapsedTime());fail("status:" + response.getStatus());} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}query("name:solr");}public static void addBean(){ Index index = new Index(); index.setId("4"); index.setName("add bean index"); index.setManu("index bean manu"); index.setCat(new String[] { "a1", "b2" }); try { //添加Index Bean到索引库 UpdateResponse response = server.addBean(index); fail(server.commit());//commit后才保存到索引库 fail(response); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } queryAll(); }public static void queryAll() { ModifiableSolrParams params = new ModifiableSolrParams(); // 查询关键词,*:*代表所有属性、所有值,即所有index params.set("q", "*:*"); // 分页,start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。 params.set("start", 0); params.set("rows", Integer.MAX_VALUE); // 排序,,如果按照id 排序,,那么将score desc 改成 id desc(or asc) //params.set("sort", "score desc"); // 返回信息 * 为全部 这里是全部加上score,如果不加下面就不能使用score params.set("fl", "*,score"); try { QueryResponse response = server.query(params); SolrDocumentList list = response.getResults(); for (int i = 0; i < list.size(); i++) { fail(list.get(i)); } } catch (SolrServerException e) { e.printStackTrace(); } } public static void main(String[] args) {//addDoc();//addBean();String fileName = "F:/Apache_Shiro开发文档.pdf"; String solrId = "Apache_Shiro开发文档.pdf"; try { indexFilesSolrCell(fileName, solrId); } catch (IOException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } } /** 从文件创建索引 * <功能详细描述> * @param fileName * @param solrId * @see [类、类#方法、类#成员] */ public static void indexFilesSolrCell(String fileName, String solrId) throws IOException, SolrServerException { String urlString = "http://localhost:8080/solr/collection1"; SolrServer solr = new HttpSolrServer(urlString); ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract"); String contentType="application/pdf"; up.addFile(new File(fileName), contentType); up.setParam("literal.id", solrId); up.setParam("uprefix", "attr_"); up.setParam("fmap.content", "attr_content"); up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); solr.request(up); SolrQuery query = new SolrQuery("*:*"); QueryResponse rsp = solr.query(query); System.out.println(rsp); } }
- 2 SOLR2:SOLR整合TOMCAT+导入数据并创建索引+solrj操作
- solr导入oracle数据并创建索引
- solr5.3+tomcat-7.0.65 solr从mysql数据库导入数据并创建索引
- 【Solr】深入浅出Solr(三)——使用Solrj向索引库中导入数据
- 使用solrj操作solr索引库
- 如何处理PB级别数据(2)——Apache Solr 之 使用SolrJ操作索引库
- 使用solrj操作solr
- solrj操作solr
- 用solrj操作solr
- 使用solrJ操作solr
- solr安装部署、solr测试创建core、用solrj 访问solr(索引和搜索)
- 使用Solrj管理Solr索引
- 使用Solrj管理Solr索引
- 2.myql数据导入到solr,并建立solr索引(学习笔记)
- Solr快速回顾2---SolrJ操作Solr API
- solr+tomcat+mysql 数据导入到solr
- 使用SolrJ创建索引
- SolrJ 操作索引文档
- Android面试必会
- JVM垃圾回收根搜索的三种算法
- 1.注解@pathvariable的用法
- 初识NodeJS服务端开发(Express+MySQL)
- Android中将图片保存到数据库中
- 2 SOLR2:SOLR整合TOMCAT+导入数据并创建索引+solrj操作
- 库存分析与控制课后习题
- 递归算法的一种理解
- 39 Anaconda
- 约瑟夫问题的四种解法
- 特征值分解
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- Java设计模式之简单工厂、工厂方法和抽象工厂
- 二叉树的前、中、后序遍历