2016-12-15 4 views
0

I ES bin mit 5. Nest lib auf C#.Join-Abfragen aus verschiedenen Indizes auf Elasticsearch

Ich habe zwei Indizes für ES. Man hat Kontaktinformationen und die anderen Kontaktveranstaltungen. Jeder Kunde in meinem System kann viele Kontakte haben und jeder Kontakt kann eine größere Anzahl von Ereignissen auslösen. Fast jede Kontaktaktion ist ein Ereignis.

Ich habe alle contanct Informationen in einem „Kontakt“ Index und alle meine Ereignisse Informationen in einem „Ereignis“ Index.

So habe ich eine Suche, die von Kontaktinformationen und durch die Ereignisse filtern. Das Problem, das ich habe, ist, wie man die beiden Suchen, die für Kontakte und die für Ereignisse, in einer Suche verbindet.

Im Moment habe ich zwei Abfragen, zuerst ich die Kontakte bekommen, die passen, und dann suche ich die Ereignisse für diesen Kontakt-IDs. Das Problem ist, dass die erste Suche Tausende von Kontakten IDs zurückgeben kann und ich muss die zweite Suche mit all diesen Feeds versorgen.

Gibt es einen besseren Weg, dies zu tun? Oder sollte ich meine Indizes überdenken, um zum Beispiel Kontakte und Ereignisse zusammen zu speichern und eine Eltern/Kind-Strategie zu verwenden?

+0

Was ist das Endziel Ihrer Anfrage? Um _all_ die Ereignisse für Kontakte zu erhalten, die einer Suchanfrage entsprechen? –

+0

Das Endziel ist es, die Kontakte zu bekommen, aber viele Kontaktinformationen werden als Ereignisse gespeichert, fast jede Kontaktaktion. Die Suche muss daher Kontaktinformationen wie Name, Nachname usw. und Kontakt-Ereignisse entsprechen, etwa wenn sie eine E-Mail gesehen haben, zu einer Seite navigieren usw. – Adriano

Antwort

0

Ja, Sie zwischen Speichern der Daten in einem Index oder Verwendung Eltern-Kind-Schema, erster Weg wählen müssen, ist schneller, zweiter Weg ist bequemer, wenn Sie viele Ereignisse haben und oft neue Ereignisse hinzuzufügen. Dennoch ist es besser, nicht alle Ereignisse für die Tausenden von Kontakten abzurufen, die Sie in einer einzelnen Abfrage erwähnt haben, sondern stattdessen die Scroll-API zu verwenden und die Daten während der Verarbeitung abzurufen.

Verwandte Themen