2016-08-11 2 views

Antwort

0

Wenn Sie das Dokument zählt möchten, können Sie es tun, indem Sie eine terms aggregation wie folgt aus:

POST your_index/_search 
{ 
    "aggs" : { 
     "counts" : { 
      "terms" : { "field" : "your_field" } 
     } 
    } 
} 

UPDATE

Wenn Sie den Begriff Zahl erhalten möchten, müssen Sie die _termvector API jedoch verwenden, werden Sie nur in der Lage sein, ein Dokument nach dem anderen abzufragen.

GET /your_index/your_type/1/_termvector?fields=your_field 

Und für doc1 werden Sie bekommen

  • aaa: 2
  • bbb: 1
  • ccc: 1

Die multi-term vectors API kann helfen, aber Sie werden immer noch müssen die Dokumente angeben, von denen die Termvektoren stammen sollen.

POST /your_index/your_type/_mtermvectors' -d '{ 
    "docs": [ 
     { 
     "_id": "1" 
     }, 
     { 
     "_id": "2" 
     }, 
     { 
     "_id": "3" 
     } 
    ] 
}' 

Und für Ihre Dokumente werden Sie bekommen

  • aaa: 2 + 1
  • bbb: 1
  • ccc: 1 + 1
  • www: 1
+0

Eine Aggregation von Begriffen gibt nur die Anzahl der Dokumente für jeden Begriff zurück. Dies ist die Menge an Dokumenten, auf die für jeden Begriff im invertierten Index verwiesen wird (und sogar nur annähernd, wenn er in einem gruppierten Modus ausgeführt wird). In diesem Fall erhalten Sie nur aaa-2 bbb-1 ccc-2 www-1. Die Information über die zwei Vorkommen von aaa in Dokument 1 ist verloren. Für Details siehe https://www.elastic.co/guide/en/elasticsearch/reference/2.0/search-aggregations-bucket-terms-aggregation.html –

+0

Guter Punkt @ AndreasJägle, ich habe die Frage falsch verstanden, mein Schlechter. Ich habe meine Antwort entsprechend aktualisiert – Val

+0

danke @Val für die Beantwortung, aber ich möchte die Zählung jedes Wortes in allen Dokumenten ohne Angabe von IDs. Ich möchte nicht, dass das Wort zählt. Gibt es einen Weg, der mir dabei helfen könnte? –

Verwandte Themen