2009-12-22 13 views
6

Meine Solr-Datenquelle ist eine SQL-Datenbank, in der der Primärschlüssel zusammengesetzt ist (d. H. Es sind zwei Felder).Solr DIH Delta-Import mit zusammengesetzten Primärschlüsseln?

Das ist in Ordnung für meine Haupt DIH query, ich verkette nur die Felder und das wird mein Solr Primärschlüssel. Es ist jedoch unklar, aus der Dokumentation, wie ich eine Delta-Import-Abfrage schreiben würde, um dies zu unterstützen.

Die Dokumentation schlägt vor, ich brauche zwei Abfragen - eine, um den Primärschlüssel der geänderten Zeilen zu finden, und eine andere, um dann tatsächlich die einzelnen Dokumente für jeden dieser Schlüssel abzurufen. Es gibt jedoch kein Beispiel, das dies für zusammengesetzte Schlüssel zeigt.

Idealer ich nicht diese zwei separaten Abfragen überhaupt will, wäre es weniger Last auf der Datenbank setzen, wenn diese beiden Abfragen einfach so kombiniert wurden, dass der einzige Unterschied zwischen query und deltaQuery ist die WHERE-Klausel, die auf Basis filtert auf last_changed.

Also, wenn mein Haupt query ist:

SELECT key1 || key2 as pk FROM table 

Was wäre die relevanten deltaQuery (und/oder deltaImportQuery) aussehen?

Ich habe versucht, nur die WHERE Klausel hinzufügen, aber nach der Abfrage ausgeführt habe ich eine Warnung über die fehlende deltaImportQuery und dann eine Null-Zeiger-Ausnahme.

Antwort

-1

Es gibt zwei Abfragen für deltaImport. Die erste (deltaQuery) bestimmt, was zu indizieren ist. Zum Beispiel können wir darin definieren, welche ID wir indizieren müssen. Der andere dient zum Bestimmen von Daten von diesen IDs. Schauen Sie sich mein Beispiel, Hoffnung, es `ll helfen Ihnen:

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

wichtiger Teil deltaImportQuery ist $ {dataimporter.delta.id}. So legen wir unsere ID von deltaQuery auf deltaImportQuery fest.

+0

danke, aber haben Sie tatsächlich die Frage gelesen? – Alnitak

+0

Natürlich, bevor Sie es bearbeitet haben. – Yurish

+0

eigentlich habe ich es nie bearbeitet ... – Alnitak

0

Legen Sie Ihre deltaQuery auf "1 wählen", die die deltaImportQuery dann schreiben Sie einfach Ihren deltaImportQuery mit dem auslösen '$ {dataimporter.last_index_time}' in der Klausel, wo

so deltaQuery = deltaImportQuery "1 wählen" = "select * from a_table wo 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}'" 

Unter der Annahme, key1 und key2 sind Text. Die einfachen Anführungszeichen um $ {dataimporter.delta.key2} würden nicht benötigt, wenn key2 zum Beispiel numerisch ist.