2017-07-03 2 views
2

Wie zählen Sie Objekte eines verschachtelten Felds (eine Liste verschachtelter Objekte), die eine bestimmte Bedingung in ElasticSearch erfüllen?Anzahl der verschachtelten ElasticSearch-Felder

Beispiel

Mit Kundenindex, mit Typ-Kunden, die einen Service verschachtelt Feld mit folgender Struktur:

public class Customer 
{ 
    public int Id; 
    public List<Service> Services; 
} 

public class Service 
{ 
    public int Id; 
    public DateTime Date; 
    public decimal Rating; 
} 

Wie kann ich alle Dienste zählen, die im Juni 2017 geschah und bekam ein Rating höher als 5?

Antwort

1

Gute Frage :) Um zu bekommen, was Sie wollen, sollten Sie Ihre Zuordnung im Voraus definieren, geschachtelte Eigenschaft Mapping funktioniert gut.

Die verschachtelte Typ ist eine spezielle Version des Objekts Datentyp, die Arrays von Objekten ermöglicht indiziert und jede andereunabhängig von abgefragt werden. https://www.elastic.co/guide/en/elasticsearch/reference/2.4/nested.html

Hier ist die volle Beispiel :)

Mapping

PUT example_nested_test 
{ 
    "mappings": { 
    "nested": { 
     "properties": { 
     "Id": { 
      "type": "long" 
     }, 
     "Services": { 
      "type": "nested", 
      "properties": { 
      "Id": { 
       "type": "long" 
      }, 
      "Date": { 
       "type": "date" 
      }, 
      "Rating": { 
       "type": "long" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

POST Daten

POST example_nested_test/nested/100 
    { 
     "Id" : 1, 
     "Services": [ 
     { 
      "Id": 1, 
      "Date" :"2017-05-10", 
      "Rating" : 5 
     }, 
     { 
      "Id": 2, 
      "Date" :"2013-05-10", 
      "Rating" : 2 
     }, 
     { 
      "Id": 4, 
      "Date" :"2017-05-10", 
      "Rating" : 6 
     }] 
    } 

Abfrage

GET example_nested_test/_search 
{ 
    "size":0, 
    "aggs": { 
    "Services": { 
     "nested": { 
     "path": "Services" 
     }, 
     "aggs": { 
     "Rating": { 
      "filter": { 
      "bool": { 
       "must": [ 
       { 
        "range": { 
        "Services.Date": { 
         "gt": "2017", 
         "format": "yyyy" 
        } 
        } 
       }, 
       { 
        "range": { 
        "Services.Rating": { 
         "gt": "5" 
        } 
        } 
       } 
       ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Ergebnis:

"aggregations": { 
    "Services": { 
     "doc_count": 3, 
     "Rating": { 
     "doc_count": 1 
     } 
    } 
    } 
Verwandte Themen