Я не на 100% ясно понимаю, о чем вы спрашиваете, но, возможно, вы ищете это инвертированный индекс ?
Обновление:
Вы можете использовать инвертированный индекс для сопоставления нескольких ключевых слов одновременно.
Разделите новый документ на токены и вставьте токены в паре с идентификатором документа в таблицу инвертированных индексов. (Довольно денормализованная) таблица перевернутых индексов:
inverted_index
-----
document_id keyword
Если вы ищете 3 ключевых слова вручную:
select document_id, count(*) from inverted_index
where keyword in (keyword1, keyword2, keyword3)
group by document_id
having count(*) = 3
Если у вас есть таблица ключевых слов, которые вас интересуют, просто используйте внутреннее объединение, а не операцию in ():
keyword_table
----
keyword othercols
select keyword_table.keyword, keyword_table.othercols from inverted_index
inner join keyword_table on keyword_table.keyword=inverted_index.keyword
where inverted_index.document_id=id_of_some_new_document
что-нибудь из этого ближе к тому, что вы хотите?