Ответы пользователя по тегу Db2
  • Как в sql сделать поиск по фамилии с опечатками?

    @Sumor
    К сожалению не сильно знаком с DB2, но думаю подходы примерно одинаковые.
    Во-первых, поиск можно сделать регистронезависимым на уровне БД или таблицы. В MSSQL он по-умолчанию регистронезависимый. Гуглить по словам COLLATION COLLATE. Например посмотреть тут.

    Ну а дальше можно использовать алгоритмы нечёткого поиска.
    Достаточно подробно в соответствующей статье на Хабре.
    Если у вас БД небольшая (до тысяч фамилий), то можно её банально пробежать и сравнить с искомой по расстоянию Дамерау-Левенштейна. Оформить можно функцией. Работать будет примерно так:
    SELECT * FROM People WHERE Distance(People.Family, 'Иванов') < 2

    Если сравнение по расстоянию занимает много времени, то можно применить алгоритм триграмм.
    Повесить триггер на вставку/изменение: генерировать по фамилии триграммы и складывать в отдельную таблицу.
    Тогда для поиска необходимо искомую фамилию также разложить на триграммы и искать их в таблице триграмм.
    Примерная фамилия должна соответствовать почти всем искомым триграммам.

    Можно использовать механизмы свёрток, по типу SOUNDEX, но они дают большой шум и работают хорошо только при записи фамилий на слух.
    Ответ написан
    1 комментарий