日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sorl6.0+jetty+mysql搭建solr服务

發布時間:2025/3/8 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 features

4.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服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。