У нас есть база данных с большим количеством информации о людях. Я не буду публиковать всю структуру базы данных, потому что она слишком большая, но выглядит примерно так:
лицо
ID
Имя
Улица
Город
Государство
Страна
Язык
LangCode
Язык
Проценты
ID
LastChangedBy
LastChangedOn
LocalizedInterest
InterestID
LangCode
Описание
PersonInterest
PersonID
InterestID
Теперь это только маленький пример. В нашей базе данных у нас есть около 8-9 локализованных таблиц (например, «Интерес»), с которыми можно связать человека. Человек может иметь несколько интересов, Человек может иметь несколько рабочих мест, Человек может иметь несколько образований, Человек может иметь несколько опытов, ...
Мне нужно создать функцию поиска. Допустим, вы вводите "том" в качестве условия поиска. Это должно дать список всех лиц с "том" в их имя, улица, город, штат, страна, в одном из своих интересов, в одном из своих рабочих мест, в одном из их образования, в одном из их опыта или в одном других связанных таблиц.
Если вы вводите несколько слов для поиска (например, «tom php»), он должен предоставить список всех лиц с «tom» в их имени, улице, городе, штате, стране, в одном из их интересов, в одном из своих рабочих мест, в одном из своих учебных заведений, в одном из своих опытов или в одной из других связанных таблиц И «php» в своем имени, улице, городе, штате, стране, в одном из их интересы, в одном из их рабочих мест, в одном из их образований, в одном из их опытов или в одной из других связанных таблиц.
На данный момент в таблице Person содержится около 4500 записей, и если я выполню внешнее объединение Person со всеми таблицами, которые мне нужно найти, то я найду около 1 300 000 записей и 40-50 полей для поиска.
Как мне подойти к этой проблеме, чтобы производительность была приемлемой? Клиент ожидает "что-то вроде Google" с точки зрения скорости и простоты использования.
Мы используем MS SQL Server 2000 и ASP.NET 2.0. Функциональность поиска должна быть добавлена в существующее приложение, и изменение технологии или структуры базы данных невозможно.