Занимаясь серфингом в сети, я столкнулся с Aquabrowser (не нужно нажимать, я выложу фото соответствующей части).
Это хороший способ представления результатов поиска и обнаружения семантически связанных сущностей.
Вот скриншот, взятый из one из demos .
На левой стороне у вас есть слово, которое вы набрали, и связанные слова.
Нажатие на них уточняет ваши результаты.
Теперь в качестве примера проекта у меня есть набор данных о сущностях и предметах фильма (например, wolrd-war-2 или побег из тюрьмы) и их отношениях.
Теперь я представляю несколько вариантов использования, во-первых, когда пользователь начинает с ключевого слова.
Например "Вторая мировая война".
Тогда я бы хотел вычислить связанные ключевые слова и оценить их.
Я думаю о каком-то sql-запросе, подобном этому:
Предположим, что "мировая война 2" имеет идентификатор 3.
select keywordId, count(keywordId) as total from keywordRelations
WHERE movieId IN (select movieId from keywordRelations
join movies using (movieId)
where keywordId=3)
group by keywordId order by total desc
, который в основном должен выбирать все фильмы, которые также имеют ключевое слово world-war-2, а затем ищет ключевые слова, которые есть у этих фильмов, и выбирает те, которые встречаются чаще всего.
Я думаю, с помощью этих ключевых слов я могу выбрать фильмы, которые лучше всего подходят и имеют красивое облако тегов, содержащее похожие фильмы и связанные ключевые слова.
Я думаю, что это должно работать, но очень, очень, очень неэффективно.
И это также только один уровень или отношение.
Должен быть лучший способ сделать это, но как ??
У меня в основном есть коллекция сущностей. Это могут быть разные объекты (фильмы, актеры, сюжеты, сюжетные ключевые слова) и т. Д.
У меня тоже есть отношения между ними.
Каким-то образом должна быть возможность эффективно рассчитать "семантическое расстояние" для сущностей.
Я также хотел бы реализовать больше уровней отношений.
Но я полностью застрял. Ну, я пробовал разные подходы, но все заканчивается в некоторых алгоритмах, для расчета которых требуются возрасты, а время выполнения растет в геометрической прогрессии.
Существуют ли системы баз данных, оптимизированные для этого?
Может кто-нибудь указать мне правильное направление?