Make to_tsquery return OR of lexemes instead of AND
I don't know how to do that exclusively with dict_xsyn, other than by manipulating the output as text and the converting back, but I don't think you want to do that anyway.  I think it would be a performance nightmare.

You probably want to reverse this so that all nicknames get canonicalized down to a single variant, rather than exploded out to all variants.

alter TEXT SEARCH DICTIONARY names_xsyn (KEEPORIG=true, MATCHORIG=true,
  KEEPSYNONYMS=false, MATCHSYNONYMS=true);


But I have no idea why that is not the default, so perhaps I just fundamentally misunderstand the point of that extension.

Both the tsquery and the tsvector would be canonicalized the same way, so a query with 'bobbie' would match a document with 'robert' and vice versa.

But perhaps I just don't understand your end goal.  You can do what you are directly asking for with ts_rewrite, but it is not done by building on top of dict_xsyn.  Is the example involving supernovae &amp; crab not just what you want?