Solr4.7从文件创建索引
索引数据源并不会一定来自于数据库、XML、JSON、CSV这类结构化数据,很多时候也来自于PDF、word、html、word、MP3等这类非结构化数据,从这类非结构化数据创建索引,solr也给我们提供了很好的支持,利用的是apache tika。
下面我们来看看在solr4.7中如何从pdf文件创建索引。
一、配置文件索引库
1、 新建core
我们新建一个solr的core,用于存储文件型索引,新建core的步骤请参考:
http://blog.csdn.net/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
添加请求解析配置:
- <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>
 - <str name="captureAttr">true</str>
 - </lst>
 - </requestHandler>
 
指定依赖包位置:
注意,这个相对位置不是相对于配置文件所在文件夹位置,而是相对core主目录的。比如我的配置文件在solr_home\core1\conf,但是我的jar包在solr_home\ extract那么我的相对路径就是../extract而不是../../extract。
- <lib dir="../extract" regex=".*\.jar" />
 
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一个位置。
- <types>
 - <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
 - <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
 - <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
 - <analyzer type="index">
 - <tokenizer class="solr.StandardTokenizerFactory"/>
 - <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
 - <filter class="solr.LowerCaseFilterFactory"/>
 - </analyzer>
 - <analyzer type="query">
 - <tokenizer class="solr.StandardTokenizerFactory"/>
 - <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
 - <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
 - <filter class="solr.LowerCaseFilterFactory"/>
 - </analyzer>
 - </fieldType>
 - </types>
 
4.2配置索引字段,也就是field
其中有个动态类型字段,attr_*,这个是什么意思呢。也就是solr在解析文件的时候,文件本身有很多属性,具体有哪些属性是不确定的,solr全部把他解析出来以attr作为前缀加上文件本身的属性名,组合在一起就成了field的名称
- <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
 - <field name="text" type="text_general" indexed="true" stored="true"/>
 - <field name="_version_" type="long" indexed="true" stored="true"/>
 - <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
 
到这里solr服务端的配置以及完成了。
二、solrj测试
1、 需要的jar
Maven配置
- <dependency>
 - <groupId>org.apache.solr</groupId>
 - <artifactId>solr-solrj</artifactId>
 - <version>4.7.0</version>
 - <scope>test</scope>
 - </dependency>
 - <dependency>
 - <groupId>org.apache.httpcomponents</groupId>
 - <artifactId>httpclient</artifactId>
 - <version>4.3.2</version>
 - <scope>test</scope>
 - </dependency>
 
2、 测试类CreateIndexFromPDF.java
Solrj4.7里面ContentStreamUpdateRequest的addFile方法多了一个contentType参数,指明内容类型。ContentType请参看:http://baike.baidu.com/link?url=panQQa04z0gc4-gQRnIoUhwOQPABfG6unIqE1-7SEe5ZMygYxWT2lkvoKlQmTEYIZDNhntB4T9aGQM5KhevKDa
- 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就是我们新建的文件索引库。如下图。
Solr4.7从文件创建索引的更多相关文章
- Solr 从文件创建索引
		
http://blog.csdn.net/clj198606061111/article/details/21492457 http://wiki.apache.org/solr/Extracting ...
 - lucene 建立索引的不同方式
		
1.创建一个简单的索引: package lia.meetlucene; import java.io.File; import org.apache.lucene.document.Document ...
 - Lucene.Net无障碍学习和使用:索引篇
		
一.简单认识索引 Lucene.Net的应用相对比较简单.一段时间以来,我最多只是在项目中写点代码,利用一下它的类库而已,对很多名词术语不是很清晰,甚至理解 可能还有偏差.从我过去的博客你也可以看出, ...
 - windows索引服务
		
windows索引服务是windows操作系统提供的桌面搜索引擎,通过预先创建索引来提高对硬盘上文件内容的搜索速度.以windows服务程序的方式运行. 一.工作方式 1.对指定路径下的文件创 ...
 - Linux下的压缩和解压缩命令——jar
		
原文链接:http://blog.chinaunix.net/uid-692788-id-2681136.htmlJAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有 ...
 - MongoDB常用命令
		
本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...
 - jar命令的用法详解
		
本文详细讲述了JAR命令的用法,对于大家学习和总结jar命令的使用有一定的帮助作用.具体如下: JAR包是Java中所特有一种压缩文档,其实大家就可以把它理解为.zip包.当然也是有区别的,JAR包中 ...
 - .bat文件和Jar包的生成及运行
		
.bat文件和Jar包的生成及运行 1.Jar包简单介绍 Jar包是Java中所特有的一种压缩文档,有点类似于zip包,区别在于Jar包中有一个META-INF\MANIFEST.MF文件(在生成Ja ...
 - MongoDB使用小结:一些常用操作分享
		
本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...
 
随机推荐
- iOS开发中,应用内直接跳转到Appstore
			
iOS开发中,应用内直接跳转到Appstore 1.进入appstore中指定的应用NSString *str = [NSString stringWithFormat: ...
 - 【hadoop】14、hadoop2.5的mapreduce的 配置
			
配置mapreduce <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href ...
 - java 反射提取类信息, 动态代理 和过滤某些方法演示
			
java 反射提取类信息, 动态代理 和过滤某些方法演示 package org.rui.classts.reflects; import java.lang.reflect.Constructor; ...
 - iOS 自定义各类bar的属性
			
在iOS应用开发中,经常需要为导航栏和标签栏设置相同的主题,一个一个去设置的话,就太麻烦了,可以通过对应用中所有的导航栏和标签栏同意设置背景.字体等属性. 如:创建一个继承自“UINavigation ...
 - Unity cg vertex and fragment shaders(二)
			
着色器的一般结构: Shader "MyShader/MyShaderName" { Properties { // ... properties here ... } SubSh ...
 - java代理课程测试 spring AOP代理简单测试
			
jjava加强课程测试代码 反射. 代理 .泛型.beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169 热身运动 ...
 - ThinkPHP常量参考
			
常用常量 APP_NAME 当前项目名称 APP_PATH 当前项目路径 GROUP_NAME 当前分组名称 MODULE_NAME 当前Action模块名称 ACTION_NAME 当前操作的名称 ...
 - [LeetCode]题解:005-Longest Palindromic Substring优化
			
题目来源和题意分析: 详情请看我的博客:http://www.cnblogs.com/chruny/p/4791078.html 题目思路: 我上一篇博客解决这个问题的时间复杂度是最坏情况是(O(n^ ...
 - 在IT公司,project manager 基本上和秘书,助理什么的差不多
			
我感觉非常有道理,所以我不做Leader,哈哈哈
 - Mac OS X Mavericks or Yosemite 安装Nginx、PHP、Mysql、phpMyAdmin
			
翻译:http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-homebrew/ 最 ...
 
			
		