2015-10-01 2 views
1

У меня есть таблица с миллионами строк. Теперь, когда пользователь делает какую-либо орфографическую ошибку при поиске строки или слова из таблицы, я хочу рекомендовать правильное слово или строку пользователя из таблицы. Я использую алгоритм jaro-winkler для сравнения расстояния от строки, но поскольку моя база данных огромна, мой запрос занимает столько времени при выполнении. Некоторые, как мне придется минимизировать данные перед применением алгоритма jaro-winkler.Поиск Рекомендация/предложение по большой базе данных

Есть ли другой лучший способ, с помощью которого я могу получить рекомендацию быстрого поиска из большой таблицы.

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

Просьба предложить.

ответ

0

Возможно, вы захотите попробовать запрос SOUNDEX https://en.wikipedia.org/wiki/Soundex. https://msdn.microsoft.com/en-us/library/ms187384.aspx

  • АЬТЕЕ таблицу и добавить столбец для Soundex слова
  • UPDATE таблица для заполнения Soundex для слова
  • Добавить INDEX на колонке SOUNDEX
  • SELECT * FROM Таблица WHERE WordSoundex = SOUNDEX (@query)
+0

Эй, спасибо за ваш ответ. ваше предложение работает для каких-то сценариев. Если в моей таблице есть ключевые слова «lisa» и «lake», то soundex обоих ключевых слов будет таким же, поэтому, если я сравню его с soundex «leke», тогда я получаю оба ключевых слова как вывод, и поскольку у меня так много похожих слов, я я не получаю идеального соответствия. Там, где Харо Уинклер дает расстояние от «leke» и «lake» меньше, чем «leke» и «lisa». Поэтому я думаю, что jaro winkler - более подходящий вариант для меня. Единственное беспокойство - время, требуемое Яро-Винклером, и мне нужно сократить его. – JP711

+0

@ user5396801 - Все, что вам нужно сделать, это обработать результаты вашего запроса soundex с помощью функции JW distance t получить окончательный результат. Sundex отбросит огромный стол до управляемого размера, чтобы вы могли использовать дорогостоящий алгоритм для того, что осталось. –

+0

Это действительно отличный вариант. Я постараюсь, и я думаю, что 99% он будет работать быстро. Но я нашел еще одну проблему с двумя ключевыми словами. «водяной знак» и «водяной знак». «Водяной знак» присутствует в базе данных, но если пользователь вводит «waterman», в идеале я должен предлагать «водяной знак», так как JW на 97% ближе. но soundex из «водяного знака» - W36562, а «waterman» - «W365», поэтому он не соответствует ему. – JP711

Смежные вопросы