Sobes.tech
Senior
40

Графты сүзгіден өткізу тапсырмасы: екі эндпоинт бар — GET /graph (адам бойынша түйіндер мен қабырғалардан тұратын графты қайтарады) және GET /events (ClickHouse-тен адам бойынша оқиғалар мен орналасу өрісі бар). Сіз графты сүзгіден өткізу үшін эндпоинтті жүзеге асыруыңыз керек, ол тек белгілі бір орналасудағы оқиғаларда кездескен түйіндерді қалдырады (мысалы, Мәскеу). Іске асыру логикасын сипаттаңыз.

Сұралған компаниялар
Себе

AI-дан жауап

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

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