LINUX.ORG.RU

История изменений

Исправление iliyap, (текущая версия) :

Не знаю что такое монга, но в реляционной модели это хотя бы выразимо. Если есть отношение doc (docid, ...) и отношение doctag (docid, tag), а искомый заголовок с разбивкой по словам в виде отношения word (word), то надо выбрать документы, у которых количество тегов совпадает с количеством тегов из множества слов.

select d.*
from doc d
where (select count(1)
       from doctag t
       where t.docid=d.docid) =
      (select count(1)
       from doctag t, word w
       where t.docid=d.docid
       and t.tag=w.word)

В реальной рсубд конечно потребуется фуллскан по внешней таблице doc, но все джойны вполне выполнимы нестед лупами, так что памяти много не надо, и первые результаты можно получить из курсора до окончания фуллскана.

Исходная версия iliyap, :

Не знаю что такое монга, но в реляционной модели это хотя бы выразимо. Если есть отношение doc (docid, ...) и отношение doctag (docid, tag), а искомый заголовок с разбивкой по словам в виде отношения word (word), то надо выбрать документы, у которых количество тегов совпадает с количеством тегов из множества слов.

select d.*
from doc d
where (select count(1)
       from doctag t
       where t.docid=d.docid) =
      (select count(1)
       from doctag t, word w
       where t.docid=d.docid
       and t.tag=w.word) as dwcount

В реальной рсубд конечно потребуется фуллскан по внешней таблице doc, но все джойны вполне выполнимы нестед лупами, так что памяти много не надо, и первые результаты можно получить из курсора до окончания фуллскана.