У меня есть следующее требование: -
У меня много (скажем, 1 миллион) значений (имен). Пользователь будет вводить строку поиска.
Я не ожидаю, что пользователь правильно назовет имена.
Итак, я хочу сделать вид Google "Вы имели в виду". Это отобразит все возможные значения из моего хранилища данных. Здесь есть аналогичный, но не такой же вопрос . Это не отвечало на мой вопрос.
Мой вопрос: - 1) Я считаю, что хранить эти данные в РСУБД нецелесообразно. Потому что тогда у меня не будет фильтра по SQL-запросам. И мне нужно выполнить полное сканирование таблицы. Итак, в этой ситуации, как данные должны храниться?
2) Второй вопрос такой же, как . Но только для полноты моего вопроса: как я могу выполнить поиск через большой набор данных? Предположим, есть имя Фрэнки в наборе данных. Если пользователь набирает имя Phranky, как мне соответствовать Franky? Нужно ли мне перебирать все имена?
Я наткнулся на Levenshtein Distance, что будет хорошей техникой для поиска возможных строк. Но опять же, мой вопрос заключается в том, что я должен использовать все 1 миллион значений из моего хранилища данных?
3) Я знаю, Google делает это, наблюдая за поведением пользователей. Но я хочу сделать это, не наблюдая за поведением пользователя, т.е. Используя, я еще не знаю, скажу дистанционные алгоритмы. Поскольку для первого метода потребуется большой объем поиска, начинайте с!
4). Как Кирк Бродхерст в , есть два возможных сценария:
- Пользователи ошибочно принимают слово (редактировать дистанционный алгоритм)
- Пользователи, которые не знают слова и угадывают (алгоритм фонетического соответствия)
Меня интересует обоим. Они действительно две разные вещи; например Шон и Шон звучат одинаково, но имеют расстояние редактирования 3 - слишком высокое, чтобы считаться опечаткой.