一、搭建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; } }