国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

solr與.net系列課程(三)solr連接數據庫

2019-11-17 01:46:43
字體:
來源:轉載
供稿:網友

solr與.net系列課程(三)solr連接數據庫

solr與.net系列課程(三)solr連接數據庫

上一章直接講述的配置文件把大部分人看的很迷惑,大家都想聽的是solr到底是怎么用的,好,這一節我們就開始鏈接數據庫,首先講一下連接之前都要配置哪些文件

1.先下載連接sqlserver的驅動(sqljdbc4.jar)sqljdbc4.jar,),將其復制到C:/PRogram Files/Apache Software Foundation/Tomcat 7.0/webapps/solr/WEB-INF/lib (C:/Program Files/Apache Software Foundation/Tomcat 7.0為tomcat安裝路徑) 2.在C:/Program Files/Apache Software Foundation/Tomcat 7.0/solr/collection1/conf下新建data-config.xml文件(名字任意,路徑也可以任意) 3.在C:/Program Files/Apache Software Foundation/Tomcat 7.0/solr/collection1/conf /solrconfig.xml,文件里配置data-confing.xml路徑

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">      <lst name="defaults">            <str name="config">C:/Program Files/Apache Software Foundation/Tomcat 7.0/solr/collection1/conf/data-config.xml</str>      </lst>  </requestHandler>

4.將solr4.72文件夾下的dist, contrib文件夾復制到C:/Program Files/Apache Software Foundation/Tomcat 7.0/ 5.在C:/Program Files/Apache Software Foundation/Tomcat 7.0/solr/collection1/conf /solrconfig.xml,文件里配置dist, contrib這兩個文件夾的路徑(solrconfig.xml已存在這些路徑,如果以你放置的路徑不一樣,修改一下就可以了)

 <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/contrib/extraction/lib" regex=".*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/dist/" regex="solr-cell-/d.*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/contrib/clustering/lib/" regex=".*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/dist/" regex="solr-clustering-/d.*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/contrib/langid/lib/" regex=".*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/dist/" regex="solr-langid-/d.*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/contrib/velocity/lib" regex=".*/.jar" />  <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/dist/" regex="solr-velocity-/d.*/.jar" />   <lib dir="C:/Program Files/Apache Software Foundation/Tomcat 7.0/dist/" regex="solr-dataimporthandler-/d.*/.jar" />  

6.將dist文件夾下的這兩個文件復制到與數據庫驅動同一個文件夾下

以上配置的路徑我是用絕對路徑配置的,也可以用相對路徑,

以上就是需要配置的內容了,下面我將結合前一節的內容,講解如何配置連接數據庫

首先是配置data-confing.xml文件,data-confing.xml文件就是連接數據庫的配置文件(剛才新建的),將如下代碼粘貼到該文件中

<?xml version="1.0" encoding="UTF-8"?>  <dataConfig>    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.0.8;DatabaseName=test" user="sa" passWord="123"/>    <document name="Info">                    <entity name="zpxx"  transformer="ClobTransformer" pk="id"                 query="select id, name from table"                         deltaImportQuery="select id, name from table"                     deltaQuery="SELECT id FROM table where adddate > '${dataimporter.last_index_time}'">                                 <field column=“id"      name=“id"      />                      <field column=“name"      name=“name"      />           </entity>    </document>    </dataConfig>

我們來分析一下上面的代碼

    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.0.8;DatabaseName=test" user="sa" password="123"/>

這個顯而易見,就是連接數據庫的字符串了

<document name="Info">        <entity name="zpxx"  transformer="ClobTransformer" pk="id"                 query="select id, name from table"                         deltaImportQuery="select id, name from table"                     deltaQuery="SELECT id FROM table where adddate > '${dataimporter.last_index_time}'">                                 <field column=“id"      name=“solrid"      />                      <field column=“name"      name=“name"      />           </entity>    </document>

這個就是從哪張表里取數據了的sql語句了

query是獲取全部數據的SQL(solr從sql中獲取那些數據) deltaImportQuery是獲取增量數據時使用的SQL(數據庫新增數據是,追加到solr的數據) deltaQuery是獲取pk的SQL(數據庫新增數據是,追加到solr的數據時的條件,根據id ,條件是最后一次獲取的時間,${dataimporter.last_index_time,最后獲取的時間})

 <field column=“id"      name=“id"      />   <field column=“name"    name=“solrname"      />  

這個就是數據庫與solr的映射關系了,在上一節schema.xml中定義的field子節點對應,那么根據本屆內容field就要這么定義

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />    <field name="solrname" type=" string " indexed="true" stored="true" omitNorms="true"/>

其他的field就可以刪掉了(初學者不要刪,容易出問題),也可以多定義一些備用,這樣table表中id下的數據就存儲在了solr中id的位置,name就存儲在solrname下了

 <field name="_version_" type="long" indexed="true" stored="true"/>      <!-- points to the root document of a block of nested documents. Required for nested      document support, may be removed otherwise   -->   <field name="_root_" type="string" indexed="true" stored="false"/>

這個不要刪,這是solr自已自己內部的字段,刪掉會報錯,這樣solr就配置完成.

之前有朋友問到過多數據庫多表的問題,很簡單,先說多表的問題:

<entity>&hellip;.. </entity> 每一個entiy就是一張表,有幾張表就寫幾個,這里就要注意一個問題了,單核的solr是把所有的數據存儲在在一個文件中,上文中結束的時候說道, schema.xml這個文件可以設置主鍵(一定要有主鍵),默認是id, data-confing.xml,文件定義每張表時也指定了主鍵,沒寫默認id,多張表示就要注意id的唯一行了,平時我們總是喜歡使用自增id,所以多張表的id肯定會重復,主鍵的重復solr是不會報錯了,但是遵循相同主鍵后一條覆蓋前一條,所以多張表時,就要考慮主鍵唯一的問題了,如果使用guid的形式那就沒問題了,(solr從數據庫獲取數據是按<entity>….. </entity>的順序逐個表去取數據了),那如果非要主鍵重復存儲怎么辦,也可以,使用多核模式

多表實例:

<?xml version="1.0" encoding="UTF-8"?>  <dataConfig>    <dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://192.168.0.8;DatabaseName="test" user="sa" password="123"/>    <document name="Info">                    <entity name="zpxx"  transformer="ClobTransformer"                 query="select id, name from table"                         deltaImportQuery="select id, name from table"                     deltaQuery="SELECT id FROM table where adddate > '${dataimporter.last_index_time}'">                                 <field column=“id"      name=“id"      />                      <field column=“name"      name=“name"      />           </entity>              <entity name="zpxx2"  transformer="ClobTransformer"                 query="select id, name from table2"                         deltaImportQuery="select id, name from table2"                     deltaQuery="SELECT id FROM table2 where adddate > '${dataimporter.last_index_time}'">                                 <field column=“id"      name=“id"      />                      <field column=“name"      name=“name"      />           </entity>    </document>    </dataConfig>

現在再說一說多數據庫的問題了,一個配置文件可以配置多個數據源。增加一個dataSource元素就可以增加一個數據源了。name屬性可以區分不同的數據源。如果配置了多于一個的數據源,那么要注意將name配置成唯一的。

多數據庫實例:

<dataSource type="JdbcDataSource" name="ds-1" driver="com.MySQL.jdbc.Driver" url="jdbc:mysql://db1-host/dbname" user="db_username" password="db_password"/><dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db2-host/dbname" user="db_username" password="db_password"/> 然后這樣使用    ..<entity name="one" dataSource="ds-1" ...>   ..</entity><entity name="two" dataSource="ds-2" ...>   ..</entity>..

如果存在多表鏈接怎么辦,這個也可以解決, <entity>中可以嵌套<entity>達到鏈接效果

例:

   <entity name="item" query="select id name from item">                                <entity name="feature" query="select description  from feature where item_id='${item.ID}'"/>                        <entity name="item_category" query="select phone from  item_category where  category _id='${item.ID}'">            </entity>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 碌曲县| 屏边| 信丰县| 襄垣县| 大荔县| 毕节市| 合水县| 汨罗市| 库车县| 宁化县| 百色市| 绥德县| 莲花县| 祁门县| 施甸县| 离岛区| 惠水县| 兰考县| 吉林省| 武清区| 田林县| 佛坪县| 云安县| 哈巴河县| 恩施市| 民勤县| 双鸭山市| 淄博市| 贡嘎县| 阿巴嘎旗| 郎溪县| 衡山县| 仁怀市| 新建县| 景东| 朝阳县| 合山市| 汉阴县| 阿克陶县| 安吉县| 安吉县|