The dictionary should determine the functional relationship between words and tokens, otherwise it will not know which word will return when you are lexing. In your example, al maps to three different values, thus defining a multi-valued function, and the lexize function does not know what to return. As Magnus shows, you can use lexize from the proper names alan, albert, allen for the nickname al .
Remember, however, that the FTS vocabulary point does not need to perform conversions per se, but rather effectively indexes semantically relevant words. This means that the token should not resemble the original entry in any linguistic sense. Although you are right that many-to-many relationships cannot be determined, do you really need to? For example, to enable your vin example:
vin vin vincent vin vincenzo vin vinnie vin
but you can also do this:
vin grob vincent grob vincenzo grob vinnie grob
and get the same effect (although, why would you like, this is another story).
Thus, if you must parse a document with 11 versions of the Vincent name, then the to_tsvector function will return vin:11 in the first case and grob:11 in the latter.
source share