Поиск книги по названию и автору - PullRequest
0 голосов
/ 02 июня 2010

Я получил таблицу со столбцами: имя автора, фамилия автора и название книги Несколько пользователей вставляют в базу данных через импорт, и я хотел бы избежать дубликатов. Поэтому я пытаюсь сделать что-то вроде этого: У меня есть запись в БД: Имя: Исаак Фамилия: "Ассимов" Название: "Я, робот"

Если пользователь попытается добавить его снова, это будет в основном не разделенный текст (не будет разделен на имя автора, фамилию автора и название книги) Так что в основном это будет выглядеть так: «Исаак Азимов - я робот» или же «Азимов, Исаак - я робот» или же "Я робот Исаака Азимова"

Вы видите, куда я иду?

(я не могу заставить пользователя разделить все книги на имена авторов, фамилии авторов и названия книг, и мне даже не нравится идея принудить пользователя, потому что это не слишком удобно для пользователя)

Каков наилучший способ (в SQL) сравнить все эти возможные сценарии книжных данных с тем, что есть в базе данных, а не добавлять одну и ту же книгу дважды. Я думал о возможности предложить пользователю: «ЭТО книга, которую вы пытаетесь добавить?» (представьте список вместо ЭТОГО слова, точно так же, как в stackoverflow - задайте вопрос - Смежные вопросы.

Я думал о

 soundex

и, возможно, даже

 like

операторов, но пока я не получил результаты, на которые надеялся.

1 Ответ

0 голосов
/ 02 июня 2010

Вы можете реализовать значительно лучшие алгоритмы нечеткого сопоставления, чем soundex/difference, взгляните на Помимо SoundEx - Функции нечеткого поиска в MS SQL Server .

Вы также можете посмотреть на реализацию полнотекстового каталога и использовать стиль «поисковой системы» FREETEXT(), который:

Предикат, используемый в предложении WHERE искать столбцы, содержащие символьные типы данных для значений что соответствует смыслу, а не только точная формулировка слов в условие поиска

В зависимости от того, что вы делаете, вы также можете использовать веб-сервис ISBN для получения нормализованных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...