solr 6.0 mysql_sorl6.0+jetty+mysql搭建solr服務

v1.下載solr

v2.目錄結構如下

7e8c4568802465d06fdceb63b47529bf.png

v3.啟動solr(默認使用jetty部署)

在path路徑下將 bin文件夾對應的目錄加入,然后輸入 solr start(或者 solr start -p port,指定端口啟動)。在瀏覽器中訪問如下:

acfd259cae5a6c5cdec28ffcc5a4235c.png

當然,還可以啟動其他樣例的服務,在example目錄下有一個READEME.txt,如果感興趣請看一下。命令格式如下:

9c49bbeafd05eb8f4c9ebe2d811877dd.gifSolr example------------This directory contains Solr examples. Each example is contained in a

separate directory. To run a specific example,do:

bin/solr -e where is one of:

cloud : SolrCloud example

dih : Data Import Handler (rdbms, mail, rss, tika)

schemaless : Schema-less example (schema is inferred from data during indexing)

techproducts : Kitchen sink example providing comprehensive examples of Solr features9c49bbeafd05eb8f4c9ebe2d811877dd.gif

v4.Individual SolrCore

在server/solr目錄下,有一個README.txt的文件,其中說明了如何建立solr core。最簡單的建立是直接復制solr中為我們提供好的例子,打開server/solr/configsets目錄會發現里面已經有三個例子,因為我們是要從數據庫導入數據,所以復制 “data_driven_schema_configs” 這個例子並改名為 “myCollections”。

6ba92c843d05eb8c03c2adf0ccc91275.png

v5.導入需要的jar包

為了導入數據和鏈接mysql,我們還需要導入兩個重要的jar包。由於mysql的jar包並沒有在項目中,我是復制了一份放到了dist目錄下面了。另外兩個需要的jar包就是dist目錄下帶有“dataimport”標識的jar包。

然后打開myCollections/conf/solrconfig.xml,引用上面提到的jar包,如下。

1f2abca4b19febb0820c66d0c5b0c0fd.png

v6.建立數據庫

7b0881dd936ab2b0aefa995c07743249.png

建立好之后,隨便寫入一點兒數據。

v7.添加requestHandler

繼續修改myCollections/conf/solrconfig.xml,搜索  ,然后在該行之上添加如下代碼。

data-config.xml

b7337c3f277aa4c88b953f3f59706b0f.png

v8.建立連接配置文件

在myCollections/conf目錄下新建data-config.xml, 內容如下。

9c49bbeafd05eb8f4c9ebe2d811877dd.gif<?xml version="1.0" encoding="UTF-8"?>

'${dataimporter.last_index_time}'">

9c49bbeafd05eb8f4c9ebe2d811877dd.gif

說明:

dataSource是數據庫數據源。Entity就是一張表對應的實體,pk是主鍵,query是查詢語句。Field對應一個字段,column是數據庫里的column名,后面的name屬性對應着Solr的Filed的名字。其中solrdata是數據庫名,goods是表名。

其中deltaQuery是增量索引,原理是從數據庫中根據deltaQuery指定的SQL語句查詢出所有需要增量導入的數據的ID號。然后根據deltaImportQuery指定的SQL語句返回所有這些ID的數據,即為這次增量導入所要處理的數據。核心思想是:通過內置變量“${dih.delta.id}”和 “${dataimporter.last_index_time}”來記錄本次要索引的id和最近一次索引的時間。

v9.managed-schema配置field信息

搜索 

1333b146c040123cdae7224b58e23d25.png

注意:默認的 filed 不要刪除哦!

v10.添加我們剛剛建立的core

(1).點擊Core Admin,配置我們建立的solr Core的信息,如下所示。

d6c5bda1aabd23dda788f2021bcded20.png

(2).點擊 Add Core,如下所示。

81972e364b0d51c8b9185d676e7d8833.png

(3).測試索引是否成功

780ea891520286ae8b02ccf5b51b7dce.png                                 

d981bce6d321012743b810bfa30e7400.png

ef6103acc762b221a3e17dd10482dd03.png

索引成功

(4).監測查詢成功

593abbe8a8ccedd8be59772d1e2b6c25.png

查詢成功

v11.通過代碼調用solr服務

簡單建立一個java項目,依賴上dist目錄下的solr-solrj-6.0.0.jar。

測試代碼如下。

1bb54b060a31936aa53c87d9af879c24.gif9c49bbeafd05eb8f4c9ebe2d811877dd.gifimportjava.lang.reflect.Method;importjava.sql.Timestamp;importorg.apache.solr.client.solrj.SolrQuery;importorg.apache.solr.client.solrj.impl.HttpSolrServer;importorg.apache.solr.client.solrj.response.QueryResponse;importorg.apache.solr.common.SolrInputDocument;importcom.entity.Good;

@SuppressWarnings("deprecation")public classSolr {private staticHttpSolrServer solrServer;static{//注意請求地址格式:瀏覽器中的地址有 ‘#’,需要把‘#’去掉!

solrServer = new HttpSolrServer("http://localhost:8983/solr/hjz");

solrServer.setConnectionTimeout(5000);

}/*** 添加單個文檔 。

*

*@paramarticle 文章對象

*@paramarticleAddon 文章正文對象*/

public static voidinsert(Good good) {

SolrInputDocument doc= newSolrInputDocument();

doc.addField("id", good.getId());

doc.addField("name", good.getName());

doc.addField("number", good.getNumber());

doc.addField("updateTime", good.getUpdateTime());try{

solrServer.add(doc);

solrServer.commit();

}catch(Exception e) {

e.printStackTrace();

}

}/*** 根據文檔id刪除文檔 。*/

public static voiddeleteById(String id) {try{

solrServer.deleteById(id+"");

solrServer.commit();

}catch(Exception e) {

e.printStackTrace();

}

}/*** 刪除所有文檔,為安全起見,使用時再解注函數體 。*/

public static voiddeleteAll() {try{

solrServer.deleteByQuery("*:*");

solrServer.commit();

}catch(Exception e) {

e.printStackTrace();

}

}/*** 更新文檔,其實也是通過insert操作來完成 。

*

*@paramarticle 文章對象

*@paramarticleAddon 文章內容對象,如果不更新正文,可以為null。*/

public static voidupdate(Good good) {

insert(good);

}/*** 根據文檔id查詢單個文檔 。

*@return

*/

public static T getById(int id, Classclazz) {

SolrQuery query= newSolrQuery();

query.setQuery("id:" +id);try{

QueryResponse rsp=solrServer.query(query);return rsp.getBeans(clazz).get(0);

}catch(Exception e) {

e.printStackTrace();

}return null;

}/***@paramobj 對象索引

*@paramidName 主鍵名稱*/

public static voiddeleteByObject(Object obj, String idName){try{

Class> clazz =obj.getClass();//將idName的首字母變成大寫

if(Character.isLowerCase(idName.charAt(0))) idName = Character.toUpperCase(idName.charAt(0)) + idName.substring(1);

Method method= clazz.getMethod("get"+idName);

String idValue=(String) method.invoke(obj);

deleteById(idValue);

}catch(Exception e) {

e.printStackTrace();

}

}public static voidmain(String[] args){

Good good= new Good("123", 9999, "hjzgg5211314", newTimestamp(System.currentTimeMillis()));//Solr.update(good);//System.out.println(Solr.getById(123, Good.class));

deleteByObject(good, "id");

}

}9c49bbeafd05eb8f4c9ebe2d811877dd.gif

對應的實體類。

1bb54b060a31936aa53c87d9af879c24.gif9c49bbeafd05eb8f4c9ebe2d811877dd.gifimportjava.sql.Timestamp;importorg.apache.solr.client.solrj.beans.Field;public classGood{

@Field("id")privateString id;

@Field("number")private intnumber;

@Field("name")privateString name;

@Field("updateTime")privateTimestamp updateTime;

@OverridepublicString toString() {return "Good [id=" + id + ", number=" + number + ", name=" + name + ", updateTime=" + updateTime + "]";

}publicGood(){}public Good(String id, intnumber, String name, Timestamp updateTime) {super();this.id =id;this.number =number;this.name =name;this.updateTime =updateTime;

}publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}public intgetNumber() {returnnumber;

}public void setNumber(intnumber) {this.number =number;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}publicTimestamp getUpdateTime() {returnupdateTime;

}public voidsetUpdateTime(Timestamp updateTime) {this.updateTime =updateTime;

}

}9c49bbeafd05eb8f4c9ebe2d811877dd.gif

每測試一次,可以在瀏覽器中通過query方式查看測試結果是否正確。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值