博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Solr4.7从文件创建索引
阅读量:2434 次
发布时间:2019-05-10

本文共 3792 字,大约阅读时间需要 12 分钟。

索引数据源并不会一定来自于数据库、XML、JSON、CSV这类结构化数据,很多时候也来自于PDF、word、html、word、MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提供了很好的支持,利用的是apache  tika。

下面我们来看看在solr4.7中如何从pdf文件创建索引。

 

一、配置文件索引库

1、  新建core

我们新建一个solr的core,用于存储文件型索引,新建core的步骤请参考:

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

添加请求解析配置:

text
true
attr_
true

指定依赖包位置:

注意,这个相对位置不是相对于配置文件所在文件夹位置,而是相对core主目录的。比如我的配置文件在solr_home\core1\conf,但是我的jar包在solr_home\ extract那么我的相对路径就是../extract而不是../../extract。

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一个位置。

4.2配置索引字段,也就是field

其中有个动态类型字段,attr_*,这个是什么意思呢。也就是solr在解析文件的时候,文件本身有很多属性,具体有哪些属性是不确定的,solr全部把他解析出来以attr作为前缀加上文件本身的属性名,组合在一起就成了field的名称

到这里solr服务端的配置以及完成了。

二、solrj测试

1、  需要的jar

Maven配置

org.apache.solr
solr-solrj
4.7.0
test
org.apache.httpcomponents
httpclient
4.3.2
test

2、 测试类CreateIndexFromPDF.java

Solrj4.7里面ContentStreamUpdateRequestaddFile方法多了一个contentType参数,指明内容类型。ContentType请参看:

 

package com.clj.test.solr.solrj;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;/** * 从PDF创建索引 * 
<功能详细描述>
* * @author Administrator * @version [版本号, 2014年3月18日] * @see [相关类/方法] * @since [产品/模块版本] */public class CreateIndexFromPDF{ public static void main(String[] args) { String fileName = "e:/MyBatis3用户指南中文版.pdf"; String solrId = "MyBatis3用户指南中文版.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/core1"; 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); QueryResponse rsp = solr.query(new SolrQuery("*:*")); System.out.println(rsp); } }

执行上面代码,便把我们的pdf文件上传到solr服务器,解析、创建索引,后面的solr.query是执行一个查询,查询解析索引后结果。解析后pdf就变成了纯文本的内容,在控制台可以看到很多文档其他信息。

Solr解析完pdf、创建索引后,我们也可以在solr的管理界面查看索引结果。Core1s就是我们新建的文件索引库。如下图。

你可能感兴趣的文章
Routing
查看>>
json相关学习
查看>>
linux下access函数的应用
查看>>
linux下C语言中mkdir和rmdir函数
查看>>
linux系统调用之文件:递归删除非空目录
查看>>
linux下获取系统时间的方法
查看>>
ubuntu12.04安装openCV2.4.6.1
查看>>
jsp与servlet的作用以及区别--为什么说JSP底层就是一个Servlet
查看>>
看HashMap源码前的必备冷知识,白话文式教学,适合刚开始了解源码的新手观看
查看>>
Oracle安装指南
查看>>
Redis面试必备(一)
查看>>
Cookie对象入门详解
查看>>
HashMap的remove()方法详解
查看>>
单例模式-分解步骤,逐步解析
查看>>
通过Form表单一次性拿到json格式数据,及后台接收
查看>>
## EL表达式与JSTL标签用法解读
查看>>
Mybatis异常:The content of elements must consist of well-formed.......(一般出现在写分页/带大于小于号的SQL)
查看>>
Mybatis光速入门(概念模块)
查看>>
Mybatis光速入门(配置文件模块)
查看>>
关于Oracle的主键自增如何设置
查看>>