2015-04-27 10 views
5

najpierw utworzyć przykładowe dane (e1, e2, e3 są rodzaje i test jest nazwą indeksu):Jak usunąć zduplikowane wyniki wyszukiwania w elastycznym wyszukiwaniu?

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

Teraz moje pytanie brzmi: w jaki sposób mogę uzyskać tylko te dwie dane? usuń zduplikowane dane o tym samym identyfikatorze w wyniku curl -XGET _search.

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

Odpowiedz

9

Najpierw należy przeszukać wiele indeksów.
Następnie, na wyniku usuń duplikat identyfikatora.

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

To może pomóc:

+0

Czy agregacja utrzymać najwyższy wynik wynik? I czy istnieje metoda, aby umieścić wynik 'aggs' na' hits' part w wyniku json. – navins

+0

@navins Tak, domyślnie wynik jest porządkowany według wyniku. Tego rodzaju prośba zachowa tylko pierwszy wynik, który jest także najwyższym wynikiem. Nie znam drugiej części twojego pytania (może zadać drugie pytanie na SO) –

+0

dzięki, po prostu dodaj kolejne pytanie tutaj: http://stackoverflow.com/questions/29887583/how-to-paging-aggregation-result -w-elastyczne wyszukiwanie – navins

Powiązane problemy