Как выполнить запрос в Postgres с использованием URL-слага? - PullRequest
0 голосов
/ 19 марта 2020

Допустим, у меня есть следующий URL:

www.somewebsite.com/dining/caseys+grille

У меня есть таблица business_listings в Postgres, которая содержит столбец business_name. У меня есть запись в таблице с 'Casey's Grille'

Как я могу запросить 'caseys+grill' против 'Casey's Grille'?

Нужно ли использовать полнотекстовый поиск? Как бы я go об этом?

Ответы [ 3 ]

1 голос
/ 19 марта 2020

Поначалу эта проблема выглядит просто, но это червь.

Решение должно учитывать все варианты использования: это только вопрос удаления / перезаписи специальных символов? Вам нужно учитывать опечатки (это casey grill то же самое)? Вам нужно учитывать отличительные знаки (это Casey's Grill #2 то же самое)? Вам нужно учитывать сокращения (это NY Grill совпадает с New-York Grill?) Вам нужно учитывать числа (это 1st av. Grill совпадает с first avenue grill)?

Если это ваша база данных + веб-сайт, проще всего записать / сравнить URL-слаг напрямую.

Иначе, или если вы не контролируете URL-адрес (например, если это результат окна поиска), вы можете сохранить / сравнить разобранное имя. Используя заголовок базы данных и слаг URL, вы преобразуете имя в общие элементы. Например, вы заменяете общие сокращения на их полный текст, удаляете все специальные символы, удаляете / добавляете пробелы, если у вашего языка есть акценты, вы можете удалить их, стандартизируете регистр и т. Д. c. Только вы можете найти и применить подходящие преобразования.

Затем вы можете сравнить два проанализированных имени, используя любой подходящий метод сравнения (триграмма, простое равенство, как запросы и т. Д. c)

1 голос
/ 19 марта 2020

Поскольку вы ищете не обычные слова, а собственные имена и, вероятно, также хотите найти результаты, которые похожи по написанию, вам следует использовать триграмма индексы GIN и поиск сходства.

0 голосов
/ 20 марта 2020

I Предположим, вы на самом деле хотите один фрагмент текстового значения в business_name, и вы хотите, чтобы это был уникальный идентификатор для этого конкретного бизнеса.

Вы можете создать дополнительный столбец business_name_slug и создайте уникальный индекс для этого столбца.

Затем вы можете создать before insert or update триггер , который записывает слаг, созданный из business_name в этот столбец.

Сложная задача - создать логи c, которые

  • генерируют дружественную для URL версию названия компании (в сообщениях блога должен быть пример, Githuhib Gists et c., , например )
  • избегает коллизий именования, поэтому ваше уникальное ограничение не вызовет ошибку при вставке / обновлении
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...