Research: Search and Entity Resolution
Scope: forge.find text / vector / hybrid recall for half-remembered entities.
Executive summary
Section titled “Executive summary”Exact-match Cypher fails when an LLM emits "alice c." instead of
"alice-chen". forge.find is the v0.5.0 answer for lexical, vector, and hybrid
lookup over node properties.
Key findings:
- Text search handles natural-language descriptions, paraphrases, stems, and case variants. It does not reliably handle single-character typos or abbreviations.
- Search latency stays low at notebook scale; index build cost dominates at 10K+ nodes, not query time.
- Index name and description (and aliases) together — description text is what makes paraphrase recall work.
- Hybrid search needs real embeddings to beat text-only ranking; mock vectors do not demonstrate semantic quality.
- CamelCase tool names recall better when descriptions are indexed; store acronyms explicitly in aliases when needed.
Pattern
Section titled “Pattern”from graphforge import GraphForge
forge = GraphForge("entities/")
# After bulk ingest, rely on forge.find over indexed propertiestable = forge.find("software engineer acme", label="Entity", limit=5)
# Hybrid when you already have query vectorstable = forge.find( "alice engineer", label="Entity", vector=query_vec, limit=10,)| Query style | Expectation |
|---|---|
| Exact / partial name tokens | Strong |
| Description paraphrase | Strong if description indexed |
Stems (engineering → engineer) |
Strong |
| Typos / abbreviations | Weak — use aliases or preprocessing |
| Meaning without keyword overlap | Needs vectors + hybrid |
Recommendations
Section titled “Recommendations”- Always index descriptive text with names.
- Prefer batch indexing after bulk MERGE ingest; incremental updates for live graphs.
- Use
forge.findas the primary entity-resolution entry point in LLM and agent flows.