diff --git a/milli/src/search/new/ranking_rule_graph/proximity/build.rs b/milli/src/search/new/ranking_rule_graph/proximity/build.rs
new file mode 100644
index 000000000..07ec3bb5e
--- /dev/null
+++ b/milli/src/search/new/ranking_rule_graph/proximity/build.rs
@@ -0,0 +1,165 @@
+use std::collections::BTreeMap;
+
+use super::ProximityEdge;
+use crate::new::db_cache::DatabaseCache;
+use crate::new::query_term::{LocatedQueryTerm, QueryTerm, WordDerivations};
+use crate::new::ranking_rule_graph::proximity::WordPair;
+use crate::new::ranking_rule_graph::{Edge, EdgeDetails};
+use crate::new::QueryNode;
+use crate::{Index, Result};
+use heed::RoTxn;
+use itertools::Itertools;
+
+pub fn visit_from_node(from_node: &QueryNode) -> Result