SQL-запрос, чтобы найти множество doc_ids, где есть максимальное пересечение ent_ids - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть таблица с 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 -> набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...