2009-12-22 19 views
6

Benim Solr veri kaynağım, birincil anahtarın bileşik (yani, iki alan) olduğu bir SQL veritabanıdır.Solr DIH delta-import, bileşik birincil anahtarlarla?

Bu benim ana DIH query için uygun, sadece alanları birleştirme ve bu benim Solr birincil anahtarım olur. Ancak, bu belgeyi desteklemek için bir delta-içe aktarma sorgusu nasıl yazacağım belgelemeden açık değildir.

Belgeler iki sorguya ihtiyacım olduğunu gösteriyor - biri değiştirilen satırların birincil anahtarını bulmak, diğeri de bu anahtarların her birine karşılık gelen belgeleri almak. Bununla birlikte, bileşik anahtarlar için bunu gösteren bir örnek yoktur.

İdeal Bu iki sorgular basitçe böyle birleştirildi eğer query ve deltaQuery arasındaki tek fark tabanlı filtreler WHERE fıkra olduğunu veritabanı üzerinde daha az yük koyardı, hiç o iki ayrı sorgu istemiyoruz last_changed.

Yani, benim ana query ise:

SELECT key1 || key2 as pk FROM table 

Ne alakalı deltaQuery (ve/veya deltaImportQuery) gibi görünecektir?

WHERE yan tümcesini eklemeyi denedim ancak sorgulama çalıştırıldıktan sonra eksik deltaImportQuery ile ilgili bir uyarı aldım ve ardından bir null-pointer istisnası.

cevap

-1

DeltaImport için iki sorgu vardır. Birincisi (deltaQuery) neyin endeksleneceğini belirlemek içindir. Örneğin, içinde indekslemek için ihtiyacımız olan kimliği tanımlayabiliriz. Diğeri ise bu kimliklerden gelen verileri belirlemek içindir. Benim örnek, umut bak, o `ll size yardımcı: deltaImportQuery ait

<entity name="address" pk="address_id" query="SELECT * FROM address a" deltaImportQuery="SELECT * FROM address a where a.address_id > ${dataimporter.delta.id}" 
      deltaQuery="select address_id as id from address where address_id=101010"> 

Önemli bölümü $ {dataimporter.delta.id} şeklindedir. Bu şekilde kimliğimizi deltaQuery'den deltaImportQuery'ye ayarladık.

+0

Teşekkürler, ama gerçekten soruyu okudun mu? – Alnitak

+0

Elbette, düzenlemeden önce. – Yurish

+0

aslında hiç düzenlemedim ... – Alnitak

0

yüzden deltaQuery = deltaImportQuery "1 select" nerede fıkrada '$ {dataimporter.last_index_time}' sonra sadece ile deltaImportQuery yazmak deltaImportQuery tetikleyecek "1 seçin" için deltaQuery ayarlayın = "a_table seçin * nerede LastUpdated> '$ {dataimporter.last_index_time}'" key1 ve key2 metin vardır varsayarsak

3
query="SELECT key1 || key2 as id, ...other fields FROM table" 

deltaImportQuery="SELECT key1 || key2 as id, ... other fields 
        FROM table 
        where key1 = '${dataimporter.delta.key1}' 
        and key2 = '${dataimporter.delta.key2}'" 

deltaQuery="SELECT key1 || key2 as id, key1, key2 
      FROM table 
      WHERE lastUpdated > '${dataimporter.last_index_time}'" 

. Örneğin, key2 sayısal ise, $ {dataimporter.delta.key2} 'daki tek tırnaklar gerekmeyecektir.

İlgili konular