一、搭建solr服务器
1、新建apache-solr-3.5.0文件夹作为solr服务器,在apache-solr-3.5.0下新建home文件夹作为solr主目录,新建server文件夹作为服务器目录。
2、将solr中的example中的solr文件夹下全部内容拷贝到要作为服务器的home文件夹下。
3、将solr中的example中webapps下的solr.war拷贝到要作为服务器的server文件夹下并解压,解压后的文件重命名为solr。
4、修改home文件夹下solrconfig.xml文件,设置dataDir
5、设置tomcat的context,在tomcat的server.xml中添加。
6、为Context设置相应的环境变量,说明solr的home的主目录地址。
7、(第5、6步不可用的话)设置tomcat的context,在tomcat/conf/catalina/localhost下新建solr.xml,如果tomcat的conf文件夹下没有/catalina/localhost,可以自己创建,内容如下。
启动如果报错,取消VelocityResponseWriter输出格式,可将solrconfig.xml中queryResponseWriter末尾改为false
8、拷贝mmseg4j-all-1.8.5.jar到apache-solr-3.5.0\server\solr\WEB-INF\lib下
9、在schema.xml文件中添加mmseg4j分词器
9.1、首先在home下添加dic词库
9.2、配置mmseg4j分词器
10、至此本地就可以启动tomcat访问solr了
================================================================================================================================================
二、solr在项目中的应用
1、在schema.xml中添加自己的域
2、在索引域对象属性的set方法上添加@Field("域的name")
/** * 要添加的索引域对象,目的是将相应的对象转换为IndexField之后传输到IIndexService进行更新操作 */ public class IndexField { private String id; private String title; private List<String> content; private List<String> atths; private int parentId; private int objId; private Date createDate; private String type; /** * 这个索引的唯一标识:如果是留言使用0_留言id来表示 如果是附件使用 留言ID_附件ID来表示 */ public String getId() { return id; } @Field public void setId(String id) { this.id = id; } /** * 留言的标题 */ public String getTitle() { return title; } @Field("msg_title") public void setTitle(String title) { this.title = title; } /** * 留言的内容,转换后的内容(通过Tika转换) */ public List<String> getContent() { return content; } @Field("msg_content") public void setContent(List<String> content) { this.content = content; } /** * 当前对象的父类id,如果是留言,该id为0 */ public int getParentId() { return parentId; } @Field("msg_pid") public void setParentId(int parentId) { this.parentId = parentId; } /** * 当前存储对象的id */ public int getObjId() { return objId; } @Field("msg_id") public void setObjId(int objId) { this.objId = objId; } /** * 创建的时间 */ public Date getCreateDate() { return createDate; } @Field("msg_date") public void setCreateDate(Date createDate) { this.createDate = createDate; } public List<String> getAtths() { return atths; } @Field("msg_atts") public void setAtths(List<String> atths) { this.atths = atths; } /** * 操作的对象类型,可能是Message或者Attachment */ public String getType() { return type; } @Field("msg_type") public void setType(String type) { this.type = type; } }
3、设置单例模式
public class SolrContext { private final static String URL = "http://localhost:8080/solr"; private static CommonsHttpSolrServer server = null; static { try { server = new CommonsHttpSolrServer(URL); } catch (MalformedURLException e) { e.printStackTrace(); } } public static SolrServer getServer() { return server; } }