Sobes.tech
Назад к вопросам
Senior
4

Задача фильтрации графа: есть два эндпоинта — GET /graph (возвращает граф из вершин и рёбер по персоне) и GET /events (возвращает события из ClickHouse по персоне с полем location). Нужно реализовать эндпоинт, который фильтрует граф, оставляя только те вершины, которые фигурировали в событиях с нужной локацией (например, Москва). Опиши логику реализации.

Компании, где спрашивали
Себе

Ответ от нейросети

sobes.tech AI

Для реализации эндпоинта, который фильтрует граф по локации событий, можно использовать следующую логику:

  1. Получить события из эндпоинта /events по персоне, указав фильтр по нужной локации (например, Москва). Это даст список событий с полем location.

  2. Из полученных событий извлечь уникальные идентификаторы вершин (например, ID мест или связанных сущностей), которые фигурировали в этих событиях.

  3. Получить полный граф по персоне из эндпоинта /graph.

  4. Отфильтровать вершины графа, оставив только те, ID которых присутствуют в списке из шага 2.

  5. Отфильтровать рёбра графа, оставив только те, которые соединяют оставшиеся вершины.

  6. Вернуть полученный отфильтрованный граф.

Пример на Go (упрощённо):

// Получаем события с нужной локацией
events := getEvents(personID, "Москва")

// Извлекаем ID вершин из событий
vertexIDs := make(map[string]bool)
for _, e := range events {
    vertexIDs[e.VertexID] = true
}

// Получаем полный граф
graph := getGraph(personID)

// Фильтруем вершины
filteredVertices := []Vertex{}
for _, v := range graph.Vertices {
    if vertexIDs[v.ID] {
        filteredVertices = append(filteredVertices, v)
    }
}

// Фильтруем рёбра
filteredEdges := []Edge{}
for _, edge := range graph.Edges {
    if vertexIDs[edge.From] && vertexIDs[edge.To] {
        filteredEdges = append(filteredEdges, edge)
    }
}

// Формируем и возвращаем отфильтрованный граф
filteredGraph := Graph{
    Vertices: filteredVertices,
    Edges: filteredEdges,
}
return filteredGraph

Такой подход позволяет эффективно отфильтровать граф по событиям с нужной локацией.