MySQL не очень хорошая поисковая система - PullRequest
0 голосов
/ 02 марта 2011

Я пытаюсь создать поисковую систему для нашей библиотеки.В настоящее время у меня есть вызов таблицы book_tittle, где столбец содержит:

id (int)
book_tittle (varchar 256)
book_description (varchar 256)
author_id

Когда кто-то ищет название книги, например, он набирает: "большая птица", я просто ищу из таблицы, где book_title, как '%big bird%'.

Если у меня есть книга под названием «большая птица», этого простого запроса было бы достаточно, но, к сожалению, когда у меня есть книга под названием «большая птица», запрос ничего не даст.

Может кто-нибудь предложитьмне как это решить?Так что если кто-то ищет «большую птицу», он получит книгу «большая птица» и книгу «большая голубая птица».

Ответы [ 5 ]

1 голос
/ 02 марта 2011

Если вы измените свое поле на текстовое поле вместо VARCHAR, вы можете использовать индекс FULLTEXT.Затем вы можете использовать MATCH вместо LIKE для сопоставления строки.Этот матч гораздо более гибкий.Вы можете сопоставить для big bird совпадение со словами big и bird или вы можете сопоставить для "big bird", если хотите сопоставить слова вместе.Вы также можете использовать подстановочные знаки, такие как bir*, чтобы соответствовать bird и birth.

1 голос
/ 02 марта 2011

Вы можете переписать ваш запрос следующим образом:

WHERE book_title LIKE '%big%' AND book_title LIKE '%bird%'

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

MySQL также может реализовать полнотекстовый, вам нужно будет использовать движок MyISAM,Lucene более эффективен.

1 голос
/ 02 марта 2011

Вы должны использовать поисковую систему.Проверьте Lucene .Он доступен для PHP, .NET, Java и т. Д.

0 голосов
/ 02 марта 2011

Вы пробовали встроенную полнотекстовую поддержку MySQL ?

0 голосов
/ 02 марта 2011

Вы правы - реляционные базы данных не являются хорошими поисковыми системами.

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

...