solr3.5中如何用java代码为PDF,Office等文件添加索引

solr3.5中如何用java代码为PDF,Office等文件添加索引,第1张

1、将解压包中的solr-4.7.1/dist/solr-4.7.1.war复制到tomcat_dir/webapps/目录,并命名为solr.war。

2、将solr-4.7.1/example/lib/ext/目录下的jar文件复制到tomcat/lib目录下,将solr-4.7.1/example/resources/下的log4j.properties文件复制到tomcat_dir/lib目录下

切把 solr-4.7.1/example/solr,复制到tomcat_dir/bin下。

3、修改tomcat_dir/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

URIEncoding="UTF-8" />

4、创建solr.xml,存放在路径:tomcat/conf/Catalina/localhost/solr.xml,内容:

<Context path="/solr" docBase="C:\Tomcat 7.0\webapps\solr.war"

debug="0" crossContext="true">

<Environment name="solr/home" type="java.lang.String" value="C:\Tomcat 7.0\bin\solr\" override="true" />

</Context>

PS:上面的docBase和value路径中不能存在中文字符,否则会出现404错误。

5、将C:\Tomcat 7.0\webapps下的solr.war包,启动项目解压;然后再添加几个jar包:

solr-4.7.1\dist\solr-dataimporthandler-4.7.1.jar

solr-4.7.1\dist\solr-dataimporthandler-extras-4.7.1.jar

还要加载数据库驱动包:mysql-connector-java-3.1.13-bin.jar

6、在C:\Tomcat 7.0\bin\solr\collection1\conf 下的solrconfig.xml增加以下数据库配置

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

<lst name="defaults">

<str name="config">data-config.xml</str>

</lst>

</requestHandler>

7、将tomcat\bin\solr\collection1\conf下增加data-config.xml文件,内容如下:

<dataConfig>

<dataSource type="JdbcDataSource"

driver="com.mysql.jdbc.Driver"

url="jdbc:mysql://192.168.1.221:3306/tmsdb"

user="root"

password="123456"/>

<document name="content">

<entity name="node" query="select id,author,title,content from solrdb">

<field column="id" name="id" />

<field column="author" name="author" />

<field column="title" name="title" />

<field column="content" name="content" />

</entity>

</document>

</dataConfig>

8、增加中文分词器,ik-analyzer的配置如下:

①目前的中文分词主要有两种

1,基于中科院ICTCLAS的隐式马尔科夫hhmm算法的中文分词器,例如smartcn等。(不支持自定义扩展词库)

2,基于正向迭代最细粒度切分算法(正向最大匹配并且最细分词)例如IK,庖丁等(支持自定义扩展词库)

安装分词前,可以去下载IK的分词包 :

IK-Analyzer-4.7.1-0.0.1-SNAPSHOT.jar

下载完毕后,将此包放进tomcat\solr的\WEB-INF\lib下面:tomcat\webapps\solr\WEB-INF\lib 。

下面需要在solr的schemal.xml进行分词器注册:

<!-- 配置IK分词器 -->

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">

<analyzer type="index">

<!-- 分词-->

<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>

<!-- 禁用词过滤根据情况使用-->

<!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/>-->

</analyzer>

<analyzer type="query">

<!-- 分词-->

<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>

<!-- 禁用词过滤根据情况使用-->

<!-- <filter class="org.wltea.analyzer.lucene.IKStopFilterFactory"/>-->

</analyzer>

</fieldType>

最后还得配置一个引用字段就OK了

<field name="ik" type="text_ik" indexed="true" stored="true" multiValued="true"/>

②它的安装部署十分简单,将IKAnalyzer2012.jar部署亍项目的lib目录中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目录(对于web项目,通常是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下即可 ;然后配置solr4.7中schema.xml配置解析器:

<schema name="example" version="1.1">

……

<fieldType name="text" class="solr.TextField">

<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

……

</schema>

一条索引包含了

Tips

solrJ 创建core只是把自己的文件夹加入到solr中,各种文件还要自建立

<field name="5#城市" type="string" indexed="false" stored="true"/>

pf 查询字段 qf 设置字段性对查询字段的比重 bf 设置权重的值

Searchers are presented with the indexed terms, along with numerical counts of how many matching documents were found were each term. Faceting makes it easy for users to explore search results, narrowing in on exactly the results they are looking for

简单说,solr的facet特性会搜索特定的facet.item,返回query中查询字段在item字段上的统计值且仅仅返回统计数量.

facet.poivt 实现了多维统计.例如统计班级学生的成绩分布,可以设置poivt=class,poivt=socore 返回的结果就是每个班各个成绩段学生的数量

在SolrJ中使用facet功能需要手动开启: query.setFacet(true) .然后根据需要 query.set(,) 添加条件.

facet 简单使用

Solr 是一个可供企业使用的 基于 Lucene 的开箱即用的搜索服务器 对Lucene不熟?那么建议先看看下面两篇文档

实战Lucene 第 部分 初识 Lucene lo lucene /

用Lucene加速Web搜索应用程序的开发 lucene /

一 solr介绍

solr是基于Lucene Java搜索库的企业级全文搜索引擎 目前是apache的一个项目 它的官方网址在 solr需要运行在一个servlet 容器里 例如tomcat solr在lucene的上层提供了一个基于HTTP/XML的Web Services 我们的应用需要通过这个服务与solr进行交互

二 solr安装和配置

关于solr的安装和配置 这里也有两篇非常好的文档 作者同时也是 Lucene Java 项目的提交人和发言人

使用Apache Solr实现更加灵巧的搜索 solr /l

solr /l

下面主要说说需要注意的地方

Solr的安装非常简单 下载solr的zip包后解压缩将dist目录下的war文件改名为solr war直接复制到tomcat 的webapps目录即可 注意一定要设置solr的主位置 有三种方法 我采用的是在tomcat里配置java p/env/solr/home的一个JNDI指向solr的主目录(example目录下) 建立/tomcat /conf/Catalina/localhost/solr xml文件

<Context docBase= D:/solr war debug= crossContext= true ><Environment name= solr/home type= java lang String value= D:/solr/solr override= true /></Context>

观察这个指定的solr主位置 里面存在两个文件夹 conf和data 其中conf里存放了对solr而言最为重要的两个配置文件schema xml和solrconfig xml data则用于存放索引文件

schema xml主要包括types fields和其他的一些缺省设置

solrconfig xml用来配置Solr的一些系统属性 例如与索引和查询处理有关的一些常见的配置选项 以及缓存 扩展等等

上面的文档对这两个文件有比较详细的说明 非常容易上手 注意到schema xml里有一个

<uniqueKey>url</uniqueKey>

的配置 这里将url字段作为索引文档的唯一标识符 非常重要

三 加入中文分词

对全文检索而言 中文分词非常的重要 这里采用了qieqie庖丁分词(非常不错 )) 集成非常的容易 我下载的是 alpha 版本 其中它支持最多切分和按最大切分 创建自己的一个中文TokenizerFactory继承自solr的BaseTokenizerFactory

/** * Created by IntelliJ IDEA * User: ronghao * Date: * Time: : : * 中文切词 对庖丁切词的封装 */ public class ChineseTokenizerFactory extends BaseTokenizerFactory { /** * 最多切分 默认模式 */ public static final String MOST_WORDS_MODE = most words /** * 按最大切分 */ public static final String MAX_WORD_LENGTH_MODE = max word length private String mode = nullpublic void setMode(String mode) { if (mode==null||MOST_WORDS_MODE equalsIgnoreCase(mode) || default equalsIgnoreCase(mode)) { this mode=MOST_WORDS_MODE} else if (MAX_WORD_LENGTH_MODE equalsIgnoreCase(mode)) { this mode=MAX_WORD_LENGTH_MODE} else { throw new IllegalArgumentException( 不合法的分析器Mode 参数设置: + mode)} } @Override public void init(Map args) { super init(args)setMode(args get( mode ))} public TokenStream create(Reader input) { return new PaodingTokenizer(input PaodingMaker make() createTokenCollector())} private TokenCollector createTokenCollector() { if( MOST_WORDS_MODE equals(mode)) return new MostWordsTokenCollector()if( MAX_WORD_LENGTH_MODE equals(mode)) return new MaxWordLengthTokenCollector()throw new Error( never happened )} }

在schema xml的字段text配置里加入该分词器

<fieldtype name= text class= solr TextField positionIncrementGap= >

<*** yzer type= index >

<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words />          <filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />

<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />

<filter class= solr LowerCaseFilterFactory />

<filter class= solr RemoveDuplicatesTokenFilterFactory />

</ *** yzer>

<*** yzer type= query >

<tokenizer class= ronghao fulltextsearch *** yzer ChineseTokenizerFactory mode= most words />  

<filter class= solr SynonymFilterFactory synonyms= synonyms txt ignoreCase= true expand= true />

<filter class= solr StopFilterFactory ignoreCase= true words= stopwords txt />

<filter class= solr WordDelimiterFilterFactory generateWordParts= generateNumberParts= catenateWords= catenateNumbers= catenateAll= />

<filter class= solr LowerCaseFilterFactory />

<filter class= solr RemoveDuplicatesTokenFilterFactory />

</ *** yzer>

</fieldtype>

完成后重启tomcat 即可在

体验到庖丁的中文分词 注意要将paoding *** ysis jar复制到solr的lib下 注意修改jar包里字典的home

四 与自己应用进行集成

Solr安装完毕 现在可以将自己的应用与solr集成 其实过程非常的简单 应用增加数据——>根据配置的字段构建add的xml文档——>post至solr/update

应用删除数据à根据配置的索引文档唯一标识符构建delete的xml文档——>post至solr/update

检索数据à构建查询xml—>get至/solr/select/——>对solr返回的xml进行处理——>页面展现

具体的xml格式可以在solr网站找到 另外就是solr支持高亮显示 非常方便

关于中文 solr内核支持UTF 编码 所以在tomcat里的server xml需要进行配置

<Connector port= maxHttpHeaderSize= URIEncoding= UTF …/>

另外 向solr Post请求的时候需要转为utf 编码 对solr 返回的查询结果也需要进行一次utf 的转码 检索数据时对查询的关键字也需要转码 然后用 + 连接

String[] array = StringUtils split(query null )for (String str : array) { result = result + URLEncoder encode(str UTF ) + + }

lishixinzhi/Article/program/Java/hx/201311/25984


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11365598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存