Система пользовательского поиска - PullRequest
0 голосов
/ 16 октября 2010

Как бы вы внедрили систему пользовательского поиска?

Что вы думаете о чем-то вроде этого:

SELECT *
FROM   jobs
WHERE  job_id IN (
        SELECT job_id
          FROM job_words
         WHERE word_id IN (SELECT word_id FROM words w WHERE text = 'carpenter'))
  AND  job_id IN (
        SELECT job_id
          FROM job_words
         WHERE word_id IN (SELECT word_id FROM words w WHERE text = 'buildings'))

или это:

SELECT j.*
      ,s.matches
  FROM jobs as j INNER JOIN
       (SELECT jw.job_id, count(*) as matches
          FROM job_words AS jw
               INNER JOIN (SELECT word_id FROM words w WHERE text IN ('carpenter', 'buildings')) AS w ON w.word_id = jw.word_id
        GROUP BY jw.job_id) as s ON s.job_id = j.job_id

Ответы [ 2 ]

0 голосов
/ 16 октября 2010
SELECT * FROM jobs WHERE
    job_id in (SELECT job_id FROM job_words WHERE
        word_id in (SELECT word_id FROM words WHERE text in ('carpenter', 'buildings'))
0 голосов
/ 16 октября 2010

Вам лучше заранее составить таблицы из ваших ключевых слов. Ваш код очень неэффективен. Вы в основном запускаете O (n (n + n)) каждый раз, когда запускаете этот код. Вместо этого составьте таблицы для всех «столярных» и «зданий» заранее, и, если таблица для поискового запроса не существует, используйте отправленный вами код.

...