I don't think it is possible to filter N-rich cases like the one you describe during the search. However, it is possible to collect data and to identify such cases once the search is done.
When aligning sequences, identical symbols will receive a match score (default +2). Aligning a pair of symbols where at least one of them is an ambiguous symbol (BDHKMNRSVWY) will always result in a score of zero.
So, for N-rich queries, the raw score should be low when compared to the alignment length. It is possible to collect these data for each query with the --userout output option and --userfields. Here is a toy-example:
vsearch \
--usearch_global <(printf ">query1\nNNNNNNNNNNNNNNNNNNNNNGG\n") \
--db <(printf ">target1\nGGCATGAACGATACCGATTAAGG\n") \
--quiet \
--minseqlength 23 \
--id 1.0 \
--userfields query+alnlen+ids+raw \
--userout -
query1 23 23 4
Here the alignment length is 23, the number of matches is 23, and yet the raw score is only 2, indicating an alignment with 21 ambiguous symbols.
As a side note, please keep in mind that vsearch implements a global-pairwise alignment method. If a primer sequence has several matching positions in a longer sequence (a genome), only one will be reported.