sorl6.0+jetty+mysql搭建solr服务
1.下載solr
官網:http://lucene.apache.org/solr/
2.目錄結構如下
3.啟動solr(默認使用jetty部署)
在path路徑下將 bin文件夾對應的目錄加入,然后輸入 solr start(或者 solr start -p port,指定端口啟動)。在瀏覽器中訪問如下:
?
當然,還可以啟動其他樣例的服務,在example目錄下有一個READEME.txt,如果感興趣請看一下。命令格式如下:
Solr example ------------This directory contains Solr examples. Each example is contained in a separate directory. To run a specific example, do:bin/solr -e <EXAMPLE> where <EXAMPLE> is one of:cloud : SolrCloud exampledih : 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 features4.Individual SolrCore
在server/solr目錄下,有一個README.txt的文件,其中說明了如何建立solr core。最簡單的建立是直接復制solr中為我們提供好的例子,打開server/solr/configsets目錄會發現里面已經有三個例子,因為我們是要從數據庫導入數據,所以復制 “data_driven_schema_configs” 這個例子并改名為 “myCollections”。
?
5.導入需要的jar包
為了導入數據和鏈接mysql,我們還需要導入兩個重要的jar包。由于mysql的jar包并沒有在項目中,我是復制了一份放到了dist目錄下面了。另外兩個需要的jar包就是dist目錄下帶有“dataimport”標識的jar包。
然后打開myCollections/conf/solrconfig.xml,引用上面提到的jar包,如下。
6.建立數據庫
建立好之后,隨便寫入一點兒數據。
7.添加requestHandler?
繼續修改myCollections/conf/solrconfig.xml,搜索?<requestHandler name="/select" class="solr.SearchHandler"> ,然后在該行之上添加如下代碼。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>8.建立連接配置文件
在myCollections/conf目錄下新建data-config.xml, 內容如下。
<?xml version="1.0" encoding="UTF-8"?> <dataConfig> <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdata" user="root" password="123456" batchSize="-1" /> <document> <entity name="goods" pk="id" dataSource="source1" query="select * from goods" deltaImportQuery="select * from goods where id='${dih.delta.id}'" deltaQuery="select id from goods where updateTime> '${dataimporter.last_index_time}'"> <field column="id" name="id"/> <field column="name" name="name"/> <field column="number" name="number"/> <field column="updateTime" name="updateTime"/> </entity> </document> </dataConfig>說明:
? 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和最近一次索引的時間。
9.managed-schema配置field信息
搜索?<field name= ,添加關聯數據庫表Column的信息。
注意:默認的 filed 不要刪除哦!
10.添加我們剛剛建立的core
(1).點擊Core Admin,配置我們建立的solr Core的信息,如下所示。
?
(2).點擊 Add Core,如下所示。
(3).測試索引是否成功
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
索引成功
(4).監測查詢成功
查詢成功
11.通過代碼調用solr服務
簡單建立一個java項目,依賴上dist目錄下的solr-solrj-6.0.0.jar。
測試代碼如下。
import java.lang.reflect.Method; import java.sql.Timestamp; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrInputDocument; import com.entity.Good;@SuppressWarnings("deprecation") public class Solr {private static HttpSolrServer solrServer;static {//注意請求地址格式:瀏覽器中的地址有 ‘#’,需要把‘#’去掉!solrServer = new HttpSolrServer("http://localhost:8983/solr/hjz");solrServer.setConnectionTimeout(5000);}/*** 添加單個文檔 。* * @param article 文章對象* @param articleAddon 文章正文對象*/public static void insert(Good good) {SolrInputDocument doc = new SolrInputDocument();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 void deleteById(String id) {try {solrServer.deleteById(id+"");solrServer.commit();} catch (Exception e) {e.printStackTrace();}}/*** 刪除所有文檔,為安全起見,使用時再解注函數體 。*/public static void deleteAll() {try {solrServer.deleteByQuery("*:*");solrServer.commit();} catch (Exception e) {e.printStackTrace();}}/*** 更新文檔,其實也是通過insert操作來完成 。* * @param article 文章對象* @param articleAddon 文章內容對象,如果不更新正文,可以為null。*/public static void update(Good good) {insert(good);}/*** 根據文檔id查詢單個文檔 。* @return */public static <T> T getById(int id, Class<T> clazz) {SolrQuery query = new SolrQuery();query.setQuery("id:" + id);try {QueryResponse rsp = solrServer.query(query);return rsp.getBeans(clazz).get(0);} catch (Exception e) {e.printStackTrace();}return null;} /*** @param obj 對象索引* @param idName 主鍵名稱*/public static void deleteByObject(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 void main(String[] args){Good good = new Good("123", 9999, "hjzgg5211314", new Timestamp(System.currentTimeMillis()));//Solr.update(good);//System.out.println(Solr.getById(123, Good.class));deleteByObject(good, "id");} } View Code對應的實體類。
import java.sql.Timestamp;import org.apache.solr.client.solrj.beans.Field;public class Good{@Field("id")private String id;@Field("number")private int number;@Field("name")private String name;@Field("updateTime")private Timestamp updateTime;@Overridepublic String toString() {return "Good [id=" + id + ", number=" + number + ", name=" + name + ", updateTime=" + updateTime + "]";}public Good(){}public Good(String id, int number, String name, Timestamp updateTime) {super();this.id = id;this.number = number;this.name = name;this.updateTime = updateTime;}public String getId() {return id;}public void setId(String id) {this.id = id;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Timestamp getUpdateTime() {return updateTime;}public void setUpdateTime(Timestamp updateTime) {this.updateTime = updateTime;}} View Code每測試一次,可以在瀏覽器中通過query方式查看測試結果是否正確。
12.參考資料
Solr之搭建Solr6.0服務并從Mysql上導入數據
?Solr參考指南??可以下載
轉載于:https://www.cnblogs.com/hujunzheng/p/5647896.html
總結
以上是生活随笔為你收集整理的sorl6.0+jetty+mysql搭建solr服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讲讲你第一次是什么感觉知乎(女生被进入的
- 下一篇: lintcode 最大子数组III