2015-04-27 13 views
5

prima creare alcuni dati di esempio (E1, E2, E3 sono tipi e test è il nome di indice):Come rimuovere i risultati di ricerca duplicati in elasticsearch?

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" 
} 

Ora la mia domanda è: come posso ottenere solo questi due dati? rimuovere i dati duplicati con lo stesso ID nel risultato curl -XGET _search.

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

risposta

9

Per prima cosa è necessario effettuare la ricerca su più indici.
Quindi, sul risultato rimuovere l'ID duplicato.

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

Questo potrebbe aiutare:

+0

Vuol aggregazione mantenere il risultato più alto punteggio? E c'è un metodo per mettere il risultato 'aggs' alla parte' hits' nel risultato json. – navins

+0

@navins Sì, per impostazione predefinita i risultati sono ordinati per punteggio. Questo tipo di richiesta manterrà solo il primo risultato, che è anche il risultato del punteggio più alto. Non conosco la seconda parte della tua domanda (forse fai una seconda domanda su SO) –

+0

grazie, inserisci semplicemente un'altra domanda qui: http://stackoverflow.com/questions/29887583/how-to-paging-aggregation-result -in-elasticsearch – navins