Mysql выполнение полнотекстового поиска - PullRequest
2 голосов
/ 21 апреля 2011

поздравлений каждому

Просто хотел бы узнать разницу в следующих запросах:

select*, MATCH ( thread_title, first_post ) AGAINST ('apple' IN BOOLEAN MODE) as relevance from posts where MATCH(`thread_title`, `first_post`) AGAINST('apple'  IN BOOLEAN MODE)  ORDER BY relevance DESC

и

select*, MATCH ( thread_title, first_post ) AGAINST ('apple' IN BOOLEAN MODE) as relevance from posts   ORDER BY relevance DESC 

Отредактировано

На самом деле оба получают верные результаты сверху, второй получает намного больше результатов, а первый получает только правильные результаты. Второй занимает много времени, чтобы завершить первый, гораздо быстрее. Не знаю почему.

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Первый запрос вернет результаты только для тех строк, которые соответствуют установленному ограничению (т. Е. Результаты, содержащие apple в thread_title или first_post), тогда как второй вернет все строки, независимо от того, что они содержатсоответствует вашему поисковому запросу или нет.

1 голос
/ 21 апреля 2011

Этот запрос:

SELECT  *,
        MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) AS relevance
FROM    posts
ORDER BY
        relevance DESC

вернет все записи из вашей таблицы (с relevance = 0 для тех, которые не содержат 'apple').

Этот запрос:

SELECT  *,
        MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE) AS relevance
FROM    posts
WHERE   MATCH (thread_title, first_post) AGAINST ('apple' IN BOOLEAN MODE)
ORDER BY
        relevance DESC

будет возвращать только записи, содержащие 'apple' в thread_title или first_post.Все возвращаемые релевантности будут больше, чем 0.

Второй запрос выполняется быстрее, потому что у вас, скорее всего, есть FULLTEXT INDEX на posts (thread_title, first_post) и поиск совпадений осуществляется с использованием этого индекса.

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