Поиск в базе данных без префикса "The" - PullRequest
1 голос
/ 13 сентября 2011

Может кто-нибудь указать мне правильное направление, у меня в настоящее время есть база данных для поиска и столкнулся с проблемой поиска по названию.

Если заголовок начинается с «The», то, очевидно, заголовок будет в разделе «T», каков хороший способ избежать поиска «The»? Должен ли я объединить два поля для отображения заголовка, но поиск только по второму заголовку, игнорируя префикс. или есть другой способ сделать это? Совет или направление было бы здорово. Благодарю.

Ответы [ 5 ]

2 голосов
/ 13 сентября 2011

Я полагаю, что лучший подход - использовать полнотекстовый поиск с 'the' в списке стоп-слов. Это решило бы проблему поиска (т. Е. «Поисковые фразы» были бы проигнорированы).

Однако, если вы упорядочиваете результаты по заголовкам, заголовок, начинающийся с «The», все равно будет отсортирован «в разделе« T »», как вы выразились. Чтобы решить это, есть несколько возможных подходов. Вот некоторые из них:

  • Разделение полей, как вы сказали в вопросе
  • Наличие отдельного поля с количеством символов, которые должны игнорироваться с самого начала при сортировке
  • Замена начальных 'для сортировки

Среди прочих ...

2 голосов
/ 13 сентября 2011

Несколько вариантов:

a) Сохраните заголовок в формате «Библиотека», что означает, что вы обрабатываете заголовок и сохраняете его как

Scarlet Pimpernel, The
Tale of Two Cities, A

b) Сохраняете исходный неизмененный заголовокдля отображения и добавьте новое поле «library_title» для хранения обработанной версии из a).

c) Добавьте новое поле для хранения статей и голый заголовок в поле заголовка.Для отображения вам нужно объединить два поля, а для поиска - просто посмотреть в поле заголовка.

0 голосов
/ 13 сентября 2011

Попробуйте поискать некоторые функции sql, такие как LTRIM, RTRIM и т. Д., И используйте эти функции для временного столбца, который содержит точно такие же данные.Измените данные, используя LTRIM, RTRIM, отбрасывая любые нужные слова.Затем выполните поиск по измененному столбцу и верните всю строку в качестве результата!

0 голосов
/ 13 сентября 2011

Если вы используете mysql, вы можете использовать функцию str_replace для удаления «The» из вашего запроса, или если вы используете PHP, Ruby или другой язык, вы можете просто санировать свой запрос перед отправкой на сервер базы данных.

0 голосов
/ 13 сентября 2011

Создать три столбца в базе данных

1) TitlePrefix 2) Название 3) TitlePostfix

Код такой, что у вас есть 4 метода, таких как

searchTitleOnly(testToSearch)  // search only title column
searchTitleWithPrefixAndPostfix(testToSearch)//concat all the three columns and search 
searchTitlePrefix(testToSearch) // search title prefix only
searchTitlePostfix(testToSearch) // search title postfix only
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...