2015-04-27 13 views
5

zunächst einige Beispieldaten erstellen (e1, e2, e3 sind Typen und Test wird der Indexname):Wie Sie doppelte Suchergebnisse in elasticsearch entfernen?

PUT test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
PUT test/e2/1 
{ 
    "id":1 
    "subject": "subject 2" 
} 
PUT test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

Jetzt ist meine Frage: wie kann ich nur diese beiden Daten? Entfernen Sie doppelte Daten mit der gleichen ID im curl -XGET _search Ergebnis.

test/e1/1 
{ 
    "id":1 
    "subject": "subject 1" 
} 
test/e3/2 
{ 
    "id":2 
    "subject": "subject 3" 
} 

Antwort

9

Zuerst müssen Sie über mehrere Indexe suchen.
Dann, auf das Ergebnis, entfernen Sie die doppelte ID.

POST http://myElastic.com/test/e1,e2,e3/_search 
{ 
    "aggs":{ 
    "dedup" : { 
     "terms":{ 
     "field": "id" 
     }, 
     "aggs":{ 
     "dedup_docs":{ 
      "top_hits":{ 
      "size":1 
      } 
     } 
     }  
    } 
    } 
} 

Dies könnte Ihnen helfen:

+0

Hat Aggregation halten die höchste Punktzahl Ergebnis? Und gibt es eine Methode, um das 'aggs' Ergebnis zu' hits' Teil in json Ergebnis zu setzen. – navins

+0

@navins Ja, standardmäßig sind die Ergebnisse nach der Reihenfolge sortiert. Diese Art von Anfrage behält nur das erste Ergebnis, das auch das höchste Ergebnis ist. Ich kenne den zweiten Teil Ihrer Frage nicht (vielleicht stellen Sie eine zweite Frage zu SO) –

+0

danke, einfach eine andere Frage hier: http://stackoverflow.com/questions/29887583/how-to-paging-aggregation-result -in-elasticsearch – navins

Verwandte Themen