2016-07-06 9 views
0

Wie wird die JOIN-Operation in elasticsearch für denselben Index ausgeführt? So führen Sie die JOIN-Operation in elasticsearch aus

Dies ist der Satz von Feld fow jeweils Dokumente:

 "@version": "1", 
     "@timestamp": "2016-04-26T15:56:05.379Z", 
     "phone": "..." 
     "path": "...", 
     "host": "...", 
     "type": "...", 
     "clientip": "...", 
     "ident": "-", 
     "auth": "-", 
     "timestamp": "...", 
     "verb": "...", 
     "uripath": "...", 
     "httpversion": "1.1", 
     "response": "200", 
     "bytes": "515", 
     "timetaken": "383", 
     "event_type": "type1" 
    } 

Wenn ich würde das Telefon von Dokumenten zu erhalten, die haben (event_type von Typ1, Zeitstempel zwischen date1 und date2) und (event_type von type2, Zeitstempel zwischen date3 und date4)

In mysql Denken wäre ein

zwischen zwei Ansichten verbinden
+0

Aus der Dokumentation geht hervor, dass hier die Funktion "dis_max" verwendet werden kann. Bist du über diesen gekommen? –

Antwort

0

Ich könnte nicht die optimierte Anfrage, aber es hat funktioniert:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "bool": { 
       "must": [ 
        { 
        "range": { 
         "timestamp ": { 
         "lte": date1, 
         "gte": date2 
         } 
        } 
        }, 
        { 
        "term": { 
         "event_type ": "type1" 
        } 
        } 
       ] 
       } 
      }, 
      { 
       "bool": { 
       "must": [ 
        { 
        "range": { 
         "timestamp ": { 
         "lte": date3, 
         "gte": date4 
         } 
        } 
        }, 
        { 
        "term": { 
         "event_type ": "type2" 
        } 
        } 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

Es gibt alle Dokumente zurück, die event_type von type1, timestamp zwischen date1 und date2 und alle Dokumente mit event_type von type2 und timestamp zwischen date3 und date4 enthalten.

Die bool should wird alle Dokumente zurückgeben, die einen Teil davon respektieren.

+0

Das ist wie (event_type von type1, timestamp zwischen date1 und date2) ODER (event_type von type2, timestamp zwischen date3 und date4) –

+0

@M_M Ich werde Details hinzufügen, aber wenn Sie es getestet haben, würde ich gerne Details haben. – baudsp

+0

@M_M Ja, es sind die Dokumente, die haben (event_type von type1, timestamp zwischen date1 und date2) ODER (event_type von type2, timestamp zwischen date3 und date4), aber mit UND, du wirst keine Ergebnisse haben, nein? – baudsp

Verwandte Themen