mercredi 25 mars 2015

Making ordinal synonyms for Postgres full text search


I have a Postgres 9.3 database where users are mostly searching for locations by a combination of name and/or address (or fragments of).


An example of an address would be "123 8th st".


I've been able to setup a synonym dictionary that allows users to find such an address with "123 8th street", but I can't seem to get it to do the same for ordinals. That is, I want a search for "123 8 street" (etc) to be able to find this address.


I'm using the following code:



CREATE TEXT SEARCH CONFIGURATION my_app_english (
COPY = english
);

CREATE TEXT SEARCH DICTIONARY my_app_synonyms (
TEMPLATE = synonym,
SYNONYMS = my_app_synonyms
);

ALTER TEXT SEARCH CONFIGURATION my_app_english
ALTER MAPPING FOR asciiword
WITH my_app_synonyms, english_stem;


And the synonym file had lines like:



1st 1
2nd 2
3rd 3
4th 4
5th 5
...


How can I make this full text search match "8th" when the user searches for "8"?


I suspect the token type is the issue, but am not sure how I can consistently treat the token with the ordinal like that without.





Aucun commentaire:

Enregistrer un commentaire