Uma maneira de limitar isso no código seria adicionar algo como o seguinte a um módulo personalizado:
function custom_views_pre_render(&$view) {
//get the rows from the view just before render
$results = $view->result;
//create a counter
$count = '';
//we're going to built up a new $result array
$new_results = array();
//iterate through each view row
foreach($results as $result) {
//find the taxonomy term
$term = $result->taxonomy_term_data_name;
//add the term to a string of all the terms we've seen so far
$count .= $term;
//make sure to separate them with spaces to make them easier to count
$count .= ' ' ;
//count how many rows have the same term as the current one
$term_count = array_count_values(str_word_count($count, 1));
if($term_count[$term] <= 3){
//if this is the third or fewer row with this term, add it to the new result array
$new_results[] = $result;
}
}
//instead of the normal view output, only show the results we put in our array.
$view->result = $new_results;
}
Isto é para uma visão dos termos de taxonomia conectados aos nós por meio de um relacionamento. Se você tiver apenas uma visão dos nós, sua milhagem poderá variar.
Embora impeça a exibição de mais de 3 por termo, isso não impedirá que a consulta retorne todos os resultados para cada termo, portanto, não melhora o desempenho do SQL. Se você tiver um número muito grande de resultados para cada termo, faça exibições de painéis de exibição separadas e coloque-as em uma região usando algo como o CTools Page Manager, para que você não esteja executando grandes consultas.
Como sempre, você vai querer armazenar essas coisas em cache na produção.