日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

solr mysql增量导入_Solr全量与增量导入

發布時間:2024/9/19 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 solr mysql增量导入_Solr全量与增量导入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Solr Full Import全量導入

所謂全量索引一般指的是每次從數據庫中讀取需要導入的全部數據,然后提交到Solr Server,最后刪除指定core的所有索引數據進行重建。全量導入一般在數據首次導入或者備份數據恢復時執行。

以下為一個多表查詢的全量導入案例:

ER圖:

ER圖

根據如上ER圖,我們在數據庫中執行如下SQL建表并插入測試數據。

use solr;

create table feature(item_id bigint,descrip varchar(80));

create table item(id bigint, item_name varchar(20), manu varchar(20), weight float,price float, popularity int, includes varchar(20));

create table item_category(item_id bigint, category_id bigint);

create table category(id bigint, descrip varchar(80));

alter table item add primary key(id);

alter table item_category add primary key(item_id, category_id);

alter table category add primary key(id);

insert into item values(1,"item1", "menu1", 12.0, 33.1, 10, "includes1");

insert into item_category values(1,1);

insert into category values(1,"this is the description of category 1");

insert into feature values(1,"this is the feature 1");

需求描述:我們希望將item表的所有字段以及item的category信息,item的descrip描述信息一并導入到solr指定的core中,因此solr的schema.xml中需要預先定義如下域:name, manu, weight, price, popularity, includes, cat, features.

解決方案:

比較容易想到的就是通過SQL語句一并返回所需的域(數據)。

use solr;

select i.id,i.item_name,i.manu,i.weight,i.price,i.popularity,i.includes,c.descrip as cat,f.descrip as feature from item i, item_category ic, category c, feature f where i.id=ic.item_id and ic.category_id=c.id and i.id=f.item_id;

也可以通過data-config.xml中嵌套entity來實現。

Solr Delta Import增量導入

當索引數據量很大時,每次都依靠全量導入顯然很不切實際,所以增量導入索引數據更為重要。

增量導入操作內部是新開辟一個新線程來完成,并且此時core的dataimport運行狀態為status="busy"。增量導入耗時時間取決于需要增量導入的數據集合大小。任何時候你都可以通過http://localhost:8080/solr//dataimport 這個鏈接來獲取到增量導入的運行狀態。

當增量導入操作被執行,他會讀取存儲在conf/deltaimport.properties配置文件,利用配置文件里記錄的上一次操作時間來運行增量查詢,增量導入完成后,會更新conf/deltaimport.properties配置文件里的上一次操作時間戳。首次執行增量導入時,若conf/deltaimport.properties配置文件不存在,會自動創建。

#Sun Mar 03 19:59:43 IRKT 2019

item.last_index_time=2019-03-03 19\:59\:43

last_index_time=2019-03-03 19\:59\:43

如果要使用增量導入,前提是你的表必需有兩個字段,一個是刪除標志字段即邏輯刪除標志:isdeleted,另一個則是數據創建時間字段:create_date,字段名稱不一定非得是isdeleted和create_date,但必須要包含兩個表示該含義的字段。根據數據創建時間跟上一次增量導入操作時間一對比,就可以通過SQL語句查詢出需要增量導入的數據,根據isdeleted字段可以查詢出被標記為刪除的數據,這些數據的ID主鍵需要傳遞給solr,這樣solr就能同步刪除索引中相關Document,實現數據增量更新。如果你數據表里的數據都是物理刪除,沒有邏輯標志字段的話,那么找出已刪除的數據顯得比較困難,所以這就是需要邏輯刪除標志字段的原因。

仍然使用上一節的那幾張表為例。對于復合主鍵記錄的增量更新,solr會拋出deltaQuery has no column to resolve to declared paimary key pk='key1, key2',暫時還沒有找到合適的解決方案。如有,請留言告知,謝謝。

pk:表示當前entity表示主鍵字段名稱,這里的主鍵指的是數據庫表中的主鍵,而非solr中的uniqueKey主鍵域。如果你的sql語句中使用了as關鍵字為主鍵字段定義了別名,那么這里的pk屬性需要相應的修改為主鍵字段的別名,切記;

query:用于指定全量導入時需要的sql語句,比如select * from xxx where isdeleted=0,查詢返回的是為被刪除的所有有效數據,這個query參數只對全量導入有效,對增量導入無效;

deltaQuery:查詢需要增量導入的記錄的主鍵id所需的sql語句。可能是update,insert,delete等操作,比如:deltaQuery="select id from xxx where my_date > '${dataimporter.last_index_time}'",此參數值對增量導入有效;

deletedPkQuery:查詢已經被邏輯刪除了的數據所需的SQL語句,所以這里你需要一個類似isdeleted的邏輯刪除標志位字段。solr通過此參數表示的sql語句執行后返回的結果集來刪除索引里面對應的數據。使用示例:select id from myinfo where isdeleted=1,此參數對增量導入有效。

deltaImportQuery: deltaImpotQuery="select * from myinfo where id='${dataimporter.delta.id}'",利用deltaQuery參數返回的所有需要增量導入的數據主鍵id,遍歷每個主鍵id,然后循環執行deltaImportQuery參數表示的sql語句返回所有需要增量導入的數據。其中變量${dataimporter.delta.id}用于獲取deltaQuery返回的每個主鍵id。

總結

以上是生活随笔為你收集整理的solr mysql增量导入_Solr全量与增量导入的全部內容,希望文章能夠幫你解決所遇到的問題。

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