2014-07-19 17 views
12

Niektóre rekordy są duplikowane w moim indeksie identyfikowanym przez pole numeryczne recordid.Elasticsearch usuń duplikaty

Istnieje zapytanie "usuń za zapytaniem" w "Elastycznym wyszukiwaniu", czy mogę go użyć do usunięcia jednego z duplikatów?

Lub inny sposób, aby to osiągnąć?

Odpowiedz

0

Pierwszym wyzwaniem będzie identyfikacja duplikatów dokumentów. W tym celu należy uruchomić agregację terminów w polach definiujących wyjątkowość dokumentu. Na drugim poziomie agregacji użyj top_hits, aby uzyskać identyfikator dokumentu. Gdy już tam będziesz, otrzymasz identyfikator dokumentów z duplikatami.

Teraz możesz bezpiecznie je usunąć, korzystając z funkcji Bulk API.

Możesz przeczytać o innych metodach wykrywania i usuwania duplikatów dokumentów here.

1

Tak, można znaleźć powielony dokument z kwerendy agregacji:

curl -XPOST http://localhost:9200/your_index/_search -d ' 
{ 
    "size": 0, 
    "aggs": { 
    "duplicateCount": { 
     "terms": { 
     "field": "recordid", 
     "min_doc_count": 2, 
     "size": 10 
     }, 
     "aggs": { 
     "duplicateDocuments": { 
      "top_hits": { 
      "size": 10 
      } 
     } 
     } 
    } 
    } 
}' 

następnie usunąć zduplikowane dokumenty najlepiej przy użyciu kwerendy luzem. Zajrzyj pod numer es-deduplicator, aby uzyskać automatyczne usuwanie duplikatów (uwaga: jestem autorem tego skryptu).

UWAGA: Do pobrania Zapytanie zbiorcze może być bardzo kosztowne i może spowodować awarię węzłów (w przypadku, gdy indeks jest zbyt duży, a liczba węzłów danych zbyt mała).

+0

Wystąpił błąd braku pamięci, czy możemy dodać zakres dat, aby uzyskać duplikaty z określonego zakresu dat? –

+0

@JeevaN Tak, możemy to wypróbować, chociaż nie jestem pewien, czy pomoże to w przypadku naprawdę dużych indeksów. Zachęcamy do złożenia PR. Jaka jest twoja konfiguracja (rozmiar indeksu, liczba kwalifikowanych węzłów nadrzędnych i liczba węzłów danych)? Czy podzielisz indeksy np. w dzień? – Tombart

Powiązane problemy