Windows安装Solr5.3.1
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。提供了比Lucene更为丰富的查询语言, 同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面, 是一款非常优秀的全文搜索引擎。
- 前期准备
- 创建solr webapp
- 创建core
- 应用程序插入solr索引数据
前期准备
- solr5.3.1 下载地址 http://www.apache.org/dyn/closer.lua/lucene/solr/5.3.1
- jdk1.7 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html
- tomcat 下载地址 http://tomcat.apache.org/
创建solr webapp
- 第一步:将 solr-5.3.1\server\solr-webapp 下的 webapp 文件拷贝到 apache-tomcat-7\webapps 目录下,并将webapp重命名为solr(名字任意);
- 第二步:将 solr-5.3.1\server\lib\ext 下的 log4j.properties 配置文件拷贝到 apache-tomcat-7\webapps\solr\WEB-INF\classes,如果WEB-INF下没有classes文件,创建;
- 第三步:在 apache-tomcat-7\webapps\solr 下新建一个文件夹solrhome(名字任意),将 solr-5.3.1\server\solr 下所有的文件拷贝到新建的solrhome文件夹中;
- 第四步:修改 apache-tomcat-7\webapps\solr\WEB-INF 下的 web.xml,找到如下代码:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
默认是注释掉的,放开注释,并将
<env-entry-value>/put/your/solr/home/here</env-entry-value>
中的值修改为第三步创建的solrhome目录,如:E:\MyFile\Tomcat\apache-tomcat-7\webapps\solr\solrhome;
- 第五步:运行tomcat,运行成功后访问:http://localhost:8080/solr/index.html 。
创建core
- 第一步:在solrhome文件夹下创建my_solr文件夹;
- 第二步:将 solr-5.3.1\example\example-DIH\solr\solr 下的 conf 文件夹和 core.properties 文件拷贝到my_solr文件夹下;
- 第三步:修改 core.properties 文件的内容:name=my_solr,这个name的值实际上就是core的名称,可以任意命名,为了保证统一和方便阅读,最好和文件夹名称一致;
- 第四步:solr-5.0以上默认对schema的管理是使用managed-schema,不能手动修改,需要使用SchemaRestful的API操作。如果想手动修改配置,需要conf文件夹中managed-schema拷贝一份修改为schema.xml,在solrconfig.xml中修改如下:
<codecFactory class="solr.SchemaCodecFactory"/>
<!-- 解除managed-schema管理模式 start -->
<schemaFactory class="ClassicIndexSchemaFactory"/>
<!-- 解除managed-schema管理模式 end -->
重启tomacat7,可能会报错,查看tomcat日志发现,比如出现:
缺少DataImporthandler的jar包异常等,那么将solr-5.3.1\dist下的solr-dataimporthandler-5.3.1.jar和solr-dataimporthandler-extras-5.3.1.jar拷贝到apache-tomcat-7、webapps\solr\WEB-INF\lib下。
重启tomcat7,如果出现缺少其他jar包异常,则只需要添加相应jar包即可,访问http://localhost:8080/solr/index.html地址。
应用程序插入solr索引数据
- 第一步:修改schema.xml文件,添加
<field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>
- 第二步:添加mmseg4j分词工具:
在schema.xml文件末尾添加
<!-- mmseg4j 配置 -->
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
</analyzer>
</fieldtype>
<fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word"/>
</analyzer>
</fieldtype>
<fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="E:/my_dic"/>
</analyzer>
</fieldtype>
- 第三步:添加索引数据
import java.io.IoException;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.common.SolrInputDocument;
public class InsertProgarm{
//solr 服务器地址
public static final String solrServerUrl = "http://localhost:8080/solr";
//solrhome下的core
public static final String solrCoreHome = "my_solr";
//待索引、查询字段
public static String[] docs = {
"solr是一个独立的企业级搜索应用服务器",
"它对外提供类似于Web-service的API接口",
"用户可以通过http请求",
"向搜索引擎服务器提交一定格式的XML文件生成索引",
"它可以通过http Get操作提出查找请求",
"并带的XML格式的返回结果"
};
public static void main(String[] args){
SolrClient client = new HttpSolrClient(solrServerUrl+"/"+solrCoreHome);
int i = 0;
List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>();
for(String content : docs){
SolrInputDocument doc = new SolrInputDocument ();
doc.addField("id",i++);
doc.addField("content_test",content);
solrDocs.add(doc);
}
try{
client.add(solrDocs);
client.commit();
}catch(SolrServerException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
}