2015-06-17 15 views
5

Ho un campo "NomeDipendente" in un indice di ricerca elastico - e vorrei eseguire una query che mi restituirà tutti i casi in cui ci sono valori duplicati di "EmployeeName". Può essere fatto?Come ottenere valori di campo duplicati nella ricerca elastica per nome campo senza conoscere il suo valore

Ho trovato più_like_questo ma questo richiede il valore di campo per "like_text". Ma il mio requisito è quello di ottenere l'elenco dei dipendenti che stanno avendo nomi duplicati senza conoscerne il valore.

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

Grazie in anticipo

saluti Mukesh

+0

Come appare la mappatura di 'EmployeeName'? E ''not_analyzed' o è un multi-campo con un sotto-campo' not_analyzed'? Puoi cambiare la tua mappatura in questo senso? In tal caso, vedere il commento di @Jettro di seguito, è possibile utilizzare una sub-aggregazione 'top_hits' per ottenere i documenti duplicati. – Val

+0

Grazie per la risposta nella mappatura EmployeeName non è_analizzato e ho anche ottenuto il risultato all'interno di aggregazioni. Ora cercherò di ottenere i documenti per quel risultato. Grazie ancora – Mukesh

+0

HI Val, Potete per favore darmi un esempio per top_hits. Ho provato con questo, ma sotto aggregazioni sto ottenendo un valore diverso del documento per i nomi duplicati e ottenere diversi documenti in top_hits. Grazie – Mukesh

risposta

9

È possibile utilizzare Terms Aggregation per questo.

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

Ciò restituirà tutti i valori del campo EmployeeName che si verificano in almeno 2 documenti.

+0

Questo sta dando risultati unici anche nei risultati. – Mukesh

+0

Non lo farà. '" min_doc_count ": 2' garantisce che restituisca valori duplicati. Nella risposta JSON, è necessario esaminare i valori all'interno dell'oggetto '' aggregations ''e non' 'hits'' object. – bittusarkar

+3

Nota anche che 1) questo metodo funziona solo se 'EmployeeName' è' not_analyzed' nella tua mappatura e 2) non saprai quali documenti sono duplicati, solo che ci sono duplicati. – Val

Problemi correlati