fix: add includeInvalidated option to search queries to optionally show invalidated statements (#73)

This commit is contained in:
Manoj 2025-09-15 18:38:15 +05:30 committed by GitHub
parent 15d04fb577
commit e89e7c1024
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -18,15 +18,15 @@ export async function performBM25Search(
// Build the WHERE clause based on timeframe options // Build the WHERE clause based on timeframe options
let timeframeCondition = ` let timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${options.includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
`; `;
// If startTime is provided, add condition to filter by validAt >= startTime // If startTime is provided, add condition to filter by validAt >= startTime
if (options.startTime) { if (options.startTime) {
timeframeCondition = ` timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${options.includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
AND s.validAt >= $startTime AND s.validAt >= $startTime
`; `;
} }
@ -108,15 +108,15 @@ export async function performVectorSearch(
try { try {
// Build the WHERE clause based on timeframe options // Build the WHERE clause based on timeframe options
let timeframeCondition = ` let timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${options.includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
`; `;
// If startTime is provided, add condition to filter by validAt >= startTime // If startTime is provided, add condition to filter by validAt >= startTime
if (options.startTime) { if (options.startTime) {
timeframeCondition = ` timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${options.includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
AND s.validAt >= $startTime AND s.validAt >= $startTime
`; `;
} }
@ -135,7 +135,7 @@ export async function performVectorSearch(
YIELD node AS s, score YIELD node AS s, score
WHERE s.userId = $userId WHERE s.userId = $userId
AND score >= 0.7 AND score >= 0.7
${timeframeCondition.replace("AND", "AND").replace("WHERE", "AND")} ${timeframeCondition}
${spaceCondition} ${spaceCondition}
OPTIONAL MATCH (episode:Episode)-[:HAS_PROVENANCE]->(s) OPTIONAL MATCH (episode:Episode)-[:HAS_PROVENANCE]->(s)
WITH s, score, count(episode) as provenanceCount WITH s, score, count(episode) as provenanceCount
@ -219,14 +219,14 @@ export async function bfsTraversal(
// Build the WHERE clause based on timeframe options // Build the WHERE clause based on timeframe options
let timeframeCondition = ` let timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
`; `;
// If startTime is provided, add condition to filter by validAt >= startTime // If startTime is provided, add condition to filter by validAt >= startTime
if (startTime) { if (startTime) {
timeframeCondition = ` timeframeCondition = `
AND s.validAt <= $validAt AND s.validAt <= $validAt
AND (s.invalidAt > $validAt) ${includeInvalidated ? '' : 'AND (s.invalidAt IS NULL OR s.invalidAt > $validAt)'}
AND s.validAt >= $startTime AND s.validAt >= $startTime
`; `;
} }
@ -243,10 +243,9 @@ export async function bfsTraversal(
// This query implements BFS up to maxDepth and collects all statements along the way // This query implements BFS up to maxDepth and collects all statements along the way
const cypher = ` const cypher = `
MATCH (e:Entity {uuid: $startEntityId})<-[:HAS_SUBJECT|HAS_OBJECT|HAS_PREDICATE]-(s:Statement) MATCH (e:Entity {uuid: $startEntityId})<-[:HAS_SUBJECT|HAS_OBJECT|HAS_PREDICATE]-(s:Statement)
WHERE WHERE
(s.userId = $userId) (s.userId = $userId)
AND ($includeInvalidated OR s.invalidAt IS NULL) ${includeInvalidated ? 'AND s.validAt <= $validAt' : timeframeCondition}
${timeframeCondition}
${spaceCondition} ${spaceCondition}
RETURN s as statement RETURN s as statement
`; `;