2009-12-22 10 views
6

L'origine dati My Solr è un database SQL in cui la chiave primaria è composta (vale a dire due campi).Solr DIH delta-import con le chiavi primarie composte?

Questo va bene per il mio DIH query principale, ho solo concatenato i campi e che diventa la mia chiave primaria Solr. Tuttavia non è chiaro dalla documentazione come scriverei una query di importazione delta per supportare questo.

La documentazione suggerisce che sono necessarie due query: una per trovare la chiave primaria delle righe modificate e un'altra per recuperare effettivamente i singoli documenti corrispondenti a ciascuna di tali chiavi. Non c'è nessun esempio che mostri questo per le chiavi composte.

Idealmente non voglio quei due query separate a tutti, sarebbe messo meno carico sul database se quei due interrogazioni erano semplicemente combinati in modo tale che l'unica differenza tra query e deltaQuery è la clausola WHERE che filtra basa su last_changed.

Quindi, se il mio principale query è:

SELECT key1 || key2 as pk FROM table 

quello che sarebbe il relativo deltaQuery (e/o deltaImportQuery) assomigliare?

Ho provato ad aggiungere la clausola WHERE ma dopo l'esecuzione della query ho ricevuto un avviso relativo alla mancanza dello deltaImportQuery e quindi a un'eccezione del puntatore nullo.

risposta

-1

Esistono due query per deltaImport. Il primo (deltaQuery) serve a determinare cosa indicizzare. Ad esempio, in esso possiamo definire quale ID dobbiamo indicizzare. L'altro serve per determinare i dati da questi ID. Guardate il mio esempio, la speranza, `ll ti aiuti:

<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"> 

Parte importante della deltaImportQuery è $ {} dataimporter.delta.id. Ecco come impostiamo il nostro id da deltaQuery a deltaImportQuery.

+0

grazie, ma hai effettivamente letto la domanda? – Alnitak

+0

Ovviamente, prima di modificarlo. – Yurish

+0

in realtà non l'ho mai modificato ... – Alnitak

0

impostare il proprio deltaQuery di "selezionare 1", che farà scattare l'deltaImportQuery poi basta scrivere il deltaImportQuery con il '$ {} dataimporter.last_index_time' nella clausola in cui

così deltaQuery = "select 1" deltaImportQuery = "select * from a_table dove lastUpdated> '$ {} dataimporter.last_index_time'"

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}'" 

Supponendo key1 e key2 sono testo. Le virgolette singole intorno a $ {dataimporter.delta.key2} non sarebbero necessarie se key2 fosse numerico per esempio.