У меня есть таблица с O (1M) строками со столбцами doc_id и ent_id где (doc_id, ent_id) - первичный ключ.
+--------+--------+
| doc_id | ent_id |
+--------+--------+
| 1 | a |
| 1 | b |
| 1 | x |
| 1 | y |
| 2 | a |
| 3 | a |
| 3 | x |
| 3 | y |
| 4 | x |
| 4 | y |
+--------+--------+
У меня вопрос: как мне эффективно найти набор doc_id с (скажем, мне нужны топ 1000 или 5000 doc_ids), где есть максимальное пересечение ent_id с среди выбранного набор doc_id с?
Например: в приведенной выше таблице
скажем, мне нужны 2 верхних doc_ids, где максимальное их пересечение между их ent_ids. Результат будет - doc_ids = {1,3} с [common ent_ids = {a, x, y}, common ent_ids count = 3]
скажем, мне нужны 3 верхних doc_ids, где максимальное их пересечение между их ent_ids. Результатом будет - doc_ids = {1,3,4} с [common ent_ids = {x, y}, общим ent_ids count = 2]
сноска - Если это невозможно сделать эффективно с SQL, любое направление альтернативного метода выполнения этого в коде приложения также будет полезно. скажем, преобразовать в CSV -> некоторую структуру данных [инвертированный индекс?] / библиотека + код Python -> набор результатов.