Sobes.tech
Senior

აღწერეთ ის ლოგიკა, რომელიც ახორციელებს ბოლო წერტილს, რომელიც ფილტრავს გრაფს, დატოვებს მხოლოდ იმ კვანძებს, რომლებიც გამოჩენილა მოვლენებში კონკრეტული ადგილმდებარეობით (მაგალითად, მოსკოვი).

sobes.tech AI

პასუხი 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

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