2015-06-17 15 views
5

Mam pole "EmployeeName" w elastycznym indeksie wyszukiwania - i chciałbym wykonać zapytanie, które zwróci mi wszystkie przypadki, w których występują zduplikowane wartości "EmployeeName". Czy można to zrobić?Jak uzyskać powielone wartości pól w elastycznym wyszukiwaniu według nazwy pola bez znajomości jego wartości

Znalazłem more_like_this, ale wymaga to wartości pola dla "like_text". Ale moim wymaganiem jest uzyskanie listy pracowników, którzy mają duplikaty nazwisk, nie znając ich wartości.

{ 
    "more_like_this" : { 
     "fields" : ["EmployeeName"], 
     "like_text" : "Mukesh", 
     "min_term_freq" : 1, 
     "max_query_terms" : 12 
    } 
} 

Dzięki z góry

Pozdrowienia Mukesh

+0

Jak wygląda odwzorowanie 'EmployeeName'? Czy jest to 'not_analyzed' lub czy jest to pole wieloliniowe z podpanią' not_analyzed'? Czy możesz zmienić swoje mapowanie w tym sensie? Jeśli tak jest, zobacz komentarz @Jettro poniżej, możesz użyć sub-agregacji 'top_hits', aby uzyskać duplikaty dokumentów. – Val

+0

Dzięki za odpowiedź w mapowaniu EmployeeName jest not_analyzed, a także otrzymałem wynik wewnątrz agregacji. Teraz postaram się uzyskać dokumenty dla tego wyniku. Jeszcze raz dziękuję – Mukesh

+0

HI Val, Czy możesz podać przykład top_hits. Próbowałem z tym, ale w ramach agregacji otrzymuję inną wartość dokumentu dla duplikatów nazw i uzyskiwanie różnych dokumentów w top_hits. Dzięki – Mukesh

Odpowiedz

9

Można użyć Terms Aggregation do tego.

POST <index>/<type>/_search?search_type=count 
{ 
    "aggs": { 
     "duplicateNames": { 
      "terms": { 
       "field": "EmployeeName", 
       "size": 0, 
       "min_doc_count": 2 
      } 
     } 
    } 
} 

ta zwróci wszystkie wartości pola EmployeeName które występują w co najmniej 2 dokumentów.

+0

Daje to unikalne wyniki również w wyniku. – Mukesh

+0

Nie będzie. '" min_doc_count ": 2' zapewnia, że ​​zwraca wartości, które są duplikowane. W odpowiedzi JSON, musisz spojrzeć na wartości wewnątrz obiektu '' aggregations ''object, a nie' "hits". – bittusarkar

+3

Należy również pamiętać, że 1) ta metoda działa tylko wtedy, gdy 'EmployeeName' jest' not_analyzed' w twoim mapowaniu i 2) nie będziesz wiedział, które dokumenty są duplikatami, tylko że są duplikaty. – Val

Powiązane problemy