package br.gov.servicos.busca; import br.gov.servicos.servico.ServicoRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.facet.request.TermFacetRequestBuilder; import org.springframework.data.elasticsearch.core.facet.result.Term; import org.springframework.data.elasticsearch.core.facet.result.TermResult; import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; import org.springframework.stereotype.Repository; import java.util.stream.Stream; import static java.lang.Integer.MAX_VALUE; @Repository public class BuscadorFacetado { ServicoRepository servicos; @Autowired public BuscadorFacetado(ServicoRepository servicos) { this.servicos = servicos; } public Stream<String> servicosPor(String campo) { TermResult result = (TermResult) servicos.search(new NativeSearchQueryBuilder() .withFacet(new TermFacetRequestBuilder(campo) .size(MAX_VALUE) .fields(campo) .build()) .build()) .getFacet(campo); return result.getTerms().stream().map(Term::getTerm); } }