步驟
1.安裝配置solr
2.solrJ操作增刪改solr數據
本文實現了最基本的操作,並假設已經在windows系統上安裝好jdk,數據庫操作工具等。
安裝環境 windows7
1.安裝配置solr
1.1到官網下載solr並解壓到本地磁盤
官網下載地址
官網上最新的是8.1.1版本,本人下載的是7.7.2版本,親測可用。
下載完成後,直接將文件解壓到本地目錄中。
1.2測試是否安裝成功
找到解壓後的solr文件夾,並找到solr-7.7.2/bin目錄,打開cmd並cd到該目錄。
輸入命令solr start啓動solr,如果啓動成功會顯示如圖結果:
其中8983是默認端口號。此時在瀏覽器輸入網址http://localhost:8983/solr/#/成功的話即可看到如下圖界面
如需關閉,可以使用solr stop -all命令關閉
1.3創建core
cmd在D:\solr-7.7.2\bin目錄下輸入solr create -c corename(core名稱,自定義)命令創建一個core,(注意,需要在solr start啓動solr後才能創建)
運行完成後在瀏覽器中訪問http://localhost:8983/solr/#/(刷新頁面)可以看到如下圖所示,新創建的core被添加進去
此時打開文件夾D:\solr-7.7.2\server\solr可以看到下面多了一個corename文件夾,就是我們剛纔創建的core。創建core可以直接在文件夾操作,百度上可以收到。這裏爲了方便使用命令創建。
1.4配置數據庫連接
添加驅動依賴包到如下目錄:D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib,我使用的oracle數據庫,添加的是oracle驅動包,其他數據庫添加相應驅動包即可:
找到解壓目錄D:\solr-7.7.2\dist下的solr-dataimporthandler-7.7.2.jar包和solr-dataimporthandler-extras-7.7.2.jar兩個包,也複製到D:\solr-7.7.2\server\solr-webapp\webapp\WEB-INF\lib目錄下。
找到目錄D:\solr-7.7.2\server\solr\corename\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>
在目錄D:\solr-7.7.2\server\solr\corename\conf下新建一個文件data-config.xml並添加如下內容:
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource
type="JdbcDataSource"
driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORCL"
user="ggjt"
password="123456" />
<document>
<entity name="SYS_USER" query="select
ID_,
USERNAME_,
PASSWORD_,
TYPE_,
REG_TYPE_,
STATUS_,
OFFICE_ID_,
RESERVED_A_,
RESERVED_B_,
RESERVED_C_
from SYS_USER">
<field column="ID_" name="user_id"/>
<field column="USERNAME_" name="user_userName"/>
<field column="PASSWORD_" name="user_password"/>
<field column="TYPE_" name="user_type"/>
<field column="REG_TYPE_" name="user_regType"/>
<field column="STATUS_" name="user_status"/>
<field column="OFFICE_ID_" name="user_officeId"/>
<field column="RESERVED_A_" name="user_reservedA"/>
<field column="RESERVED_B_" name="user_reservedB"/>
<field column="RESERVED_C_" name="user_reservedC"/>
</entity>
</document>
</dataConfig>
其中數據庫驅動,地址,表,用戶名,密碼和查詢sql及字段都需要替換成你自己數據庫的相應配置。field的culumn是數據庫字段名稱(查詢出來後沒有改別名下),name可以自定義,之後就是solr字段名稱。
打開文件D:\solr-7.7.2\server\solr\corename\conf下的managed-schema,並在其中的標籤裏面添加如下配置
<field name="user_id" type="string" indexed="true" stored="true"/>
<field name="user_userName" type="string" indexed="true" stored="true"/>
<field name="user_password" type="string" indexed="true" stored="true"/>
<field name="user_type" type="string" indexed="true" stored="true"/>
<field name="user_regType" type="string" indexed="true" stored="true"/>
<field name="user_status" type="string" indexed="true" stored="true"/>
<field name="user_officeId" type="string" indexed="true" stored="true"/>
<field name="user_reservedA" type="string" indexed="true" stored="true"/>
<field name="user_reservedB" type="string" indexed="true" stored="true"/>
<field name="user_reservedC" type="string" indexed="true" stored="true"/>
注意上面的name需要和前面配置的字段一樣。
1.5驗證是否成功
關掉之前打開的solr,重新啓動,cmd到D:\solr-7.7.2\bin目錄下輸入命令solr start,待啓動成功後,瀏覽器打開solr地址http://localhost:8983/solr/#/,並按如下圖選擇好,其中的Entity是你的表名。點擊excute執行。
執行完畢後刷新頁面,按如下圖查詢,可以看到右邊有數據顯示及可。
2.solrJ操作增刪改solr數據
2.1導入solr依賴包
在項目的pom.xml文件中添加如下依賴包
<!-- solr依賴 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
</dependency>
注意:導入依賴包可能會報錯,只需要在maven update的時候勾選強制執行即可。如圖:
2.2編寫java測試代碼
package cn.idatatech.websrv.modules.solr.sysUser.service;
import java.io.IOException;
import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
public class SolrSysUserService {
private final static String SOLR_URL = "http://localhost:8983/solr/test_core1";
public static void main( String[] args ){
SolrSysUserService userService = new SolrSysUserService();
// userService.add();
// userService.query();
userService.delete("123456");
}
/**
* 添加數據
* @author zoul [lang.zou]
* @date 2019-06-06 18:13
*/
public void add(){
HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrInputDocument document = new SolrInputDocument();
// ID爲solr主鍵,域不能缺
document.addField("id", "123456");
document.addField("user_id", "用戶ID");
document.addField("user_officeId", "部門ID");
document.addField("user_password", "密碼");
document.addField("user_regType", "");
document.addField("user_reservedA", "保留字段A");
document.addField("user_reservedB", "保留字段B");
document.addField("user_reservedC", "保留字段C");
document.addField("user_status", "狀態");
document.addField("user_type", "類型");
document.addField("user_userName", "名稱");
document.addField("user_newA", "新添加字段A");
try {
solrServer.add(document);
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 刪除
* @author zoul [lang.zou]
* @date 2019-06-06 18:19
*/
public void delete(String id){
if( StringUtils.isNotBlank(id) ){
HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
try {
solrServer.deleteById(id);
solrServer.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 查詢
* @author zoul [lang.zou]
* @date 2019-06-06 18:09
*/
public void query(){
HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL)
.withConnectionTimeout(10000)
.withSocketTimeout(60000)
.build();
SolrQuery query = new SolrQuery();
query.set("q", "user_id:ba33149ba38349e79dc63d0c855c3faf");
QueryResponse response = null;
try {
response = solrServer.query(query);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
SolrDocumentList results = null;
if( null != response ){
results = response.getResults();
}
long resultCount = 0;
if( null != results ){
resultCount = results.getNumFound();
}
System.out.println("查詢數量="+resultCount);
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.get("user_id"));
}
}
}
分別運行添加,查詢,刪除方法,打開地址http://localhost:8983/solr/#/可以同步看到數據更新。