前一阵 在研究搜索引擎分词技术...研究了好长时间 才有了结果..
网上的资料说的都很笼统...下面是自己的安装记录....
SOLR 安装及中文分词
一. 准备文件
1. Apache Solr 1.3
2. Apache Tomcat
3. jdk6.0
Apache Solr 1.3:
windows 版本 http://labs.xiaonei.com/apache-mirror/lucene/solr/1.3.0/apache-solr-1.3.0.zip
linux 版本 http://labs.xiaonei.com/apache-mirror/lucene/solr/1.3.0/apache-solr-1.3.0.tgz
分词以 Paoding 词为例 . 我的版本是 paoding-analysis-2.0.4-beta
二. 安装
1. 装 JDK 6.0 它集成了 JRE. 如果 是 5.0 以下的版本 .. 则需要安装 JRE
2 安装 Tomcat; 安装过程中 会提示 JDK 目录 . 选中你安装的目录即可 . 我这里 Tomcat 目录为 D:/Tomcat5.5
3. 把 Apache Solr 1.3 解压到目录 .. D:/apache-solr-1.3.0, 将它下面的 dist 文件夹中的 pache-solr-1.3.0.war 拷贝到 tomcat 的 webapps ,并且改名为 solr.war
4. 新建一个 solr-tomcat 目录 .. 我的是 D:/solr-tomcat/ 建在哪儿你可以自己决定 . 把它下面在建立一个 solr 文件夹,把 D:/apache-solr-1.3.0, 包里面的 example/solr 文件夹下面的所有文件放入到 solr 里面
5. 在 D:/Tomcat5.5 的 conf 文件夹建立 Catalina 文件夹,然后在 Catalina 文件夹中在建立 localhost 文件夹,在该文件夹下面建立 solr.xml ,
内容为 :
<Context ocBase="D:/Tomcat5.5/webapps/solr.war" debug="0" crossContext="true" > # 上面 solr.war 的目录
<Environment name="solr/home" type="java.lang.String" value="D:/solr-tomcat/solr" override="true" /> #solr 的安装目录
</Context>
6.Tomcat 运行 http://localhost:8080/solr/
成功跑起来了
三. 安装中文分词
在上面的一个文章中,已经使 solr 跑起来了,在上面的基础上,加入中文分词。我用的是 paoding 分词器!
1. 请下好 paoding 分词器,下载地址:
http://code.google.com/p/paoding/downloads/list
解压 我的目录是 D:/paoding-analysis-2.0.4-beta
2. 在使用 paoding 的时候要注意: paoding 的 dic 位置,也就是字典的位置
3. 编译一个 jar 包 如果没有 可以自己下载 jar 包
代码如下 :
package com.yeedoo.slor.tokenizer;
import java.io.Reader;
import java.util.Map;
import net.paoding.analysis.analyzer.PaodingTokenizer;
import net.paoding.analysis.analyzer.TokenCollector;
import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;
import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;
import net.paoding.analysis.knife.PaodingMaker;
import org.apache.lucene.analysis.TokenStream;
import org.apache.solr.analysis.BaseTokenizerFactory;
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 = null;
public 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<String,String> args) {
super.init(args);
setMode(args.get("mode").toString());
}
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");
}
}
将 这个 jar 包 和 paoding 目录下的 paoding-analysis.jar 一起复制到 D:/Tomcat5.5/webapps/solr/WEB-INF/lib
4.D:/solr-tomcat/solr/conf 目录下 schema.xml 文件
找到 < fieldType name ="text" class ="solr.TextField" positionIncrementGap ="100" >
将下面的 <tokenizer class="solr.WhitespaceTokenizerFactory"/> 替换为
< tokenizer class ="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode ="most-words" />
将 <analyzer type="query"> 下面的
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
替换为
< tokenizer class ="com.yeedoo.slor.tokenizer.ChineseTokenizerFactory" mode ="most-words" />
重启你的 tomcat , ok !
利用SOLR 搭建企业搜索平台 之十(数据库数据导入到solr )
一. 准备文件
1.apache-solr-dataimporthandler-1.3.0.jar 在D:/apache-solr-1.3.0/dist 目录下
2.D:/apache-solr-1.3.0/example/example-DIH/solr
3. 你是哪种数据库,提供该数据库的jdbc 驱动。
二.
在 D:/solr-tomcat/solr/conf
下创建 data-import.xml
文件 代码如下
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/discuz"
user="root"
password="root"/>
<document name="doc">
<entity name="jos_content" query="select * from cdb_members ">
<field column="uid" name="uid" />
<field column="username" name="username" />
</entity>
</document>
</dataConfig>
四. 修改D:/solr-tomcat/solr/conf 下solrconfig.xml
在613 行 加一下代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">./data-import.xml</str>
</lst>
</requestHandler>
五. 修改D:/solr-tomcat/solr/conf 下schema.xml
<defaultSearchField>uid</defaultSearchField> 设置默认搜索的字段
去掉所有<fields>… </fields> 中间的内容 加以下代码
<fields>
<field name="uid" type="string" indexed="true" stored="true" required="true"/>
<field name="username" type="text" indexed="true" stored="true" required="true"/>
<dynamicField name="*" type="ignored" /> # 必填!!!
</fields>
六. 去掉所有<solrQueryParser defaultOperator="OR"/>…</schema> 中间的内容
加一下代码
<copyField source="uid" dest="most-words"/>
<copyField source="username" dest="most-words"/>
注意 :
第五 和第六 是设置字段的..
要与 data-import.xml
里面的字段保持一致
重启 tomcat ,OK