История изменений
Исправление 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, но все джойны вполне выполнимы нестед лупами, так что памяти много не надо, и первые результаты можно получить из курсора до окончания фуллскана.