Taxonomy first
Your own categories and terms define the graph.
The taxonomy-first graph database. Your records become a knowledge graph, with ranked, explained matches in milliseconds.
Typical search, the same 1M records and limits for every engine. How we tested
AI models and the capabilities that describe them form a graph.
2.9 ms for a typical search at 1M records
The median: half of all searches finish faster.
All four engines ran the same searches on the same 1M records and returned their top 10. Bars are to scale. See every result.
Your own categories and terms define the graph.
Nest terms as deep as you like, with weights and must-haves per group.
Connect, extract, clean and stay in sync. No pipeline to build.
Finds the phrases your taxonomy is missing, and rates each one.
No model bill per search, and the same input always ranks the same.
Records stay in your database. The index is 164 MB for 1M records.
What matched, what's missing, the score and the distance.
12 tools for AI agents over MCP, plus a JSON API for apps.
Free text becomes the terms you defined
Each term a record has becomes one lit cell
Filtered, weighted, ordered and explained
1M records, from source database to searchable, in about 8.5 minutes. Projected from a measured run of the full pipeline: 358,452 records in 183 seconds.
userFind an open-weight coding model we can host in the EU.
toolsearch("code generation, open weights, EU hosting")
agentM-1042 is the best fit. It matches all three terms and ranks first.
Large record sets, and clear rules for what counts as a match.
Facts your agents can quote, with no model bill per lookup.
A knowledge graph over the database you already run.
Match each request to providers with the right skills, licence and distance.
A reason for every result, and source text that stays with you.
A fast rule-based first pass before your re-ranker or LLM.
Search
Start from
Made-up data, real logic.
| EngineMedian time per searchBrighter is betterBest in its column↓ lower or ↑ higher is better | Shortms↓, lower is betterAbout 4 keywords | Typicalms↓, lower is betterA real record's 6 keywords | With radiusms↓, lower is betterTypical, within 50 km | With required termms↓, lower is betterTypical, plus a must-have | Broadms↓, lower is better6 common keywords | Searches/sper s↑, higher is betterA mix of all five |
|---|---|---|---|---|---|---|
| Matrie | 1.12 | 2.87 | 1.27 | 1.25 | 32.2 | 93.4 |
| Elasticsearch | 4.95 | 5.36 | 5.63 | 8.15 | 39.7 | 56.8 |
| Neo4j Community | 44.6 | 701 | 849 | 23.7 | 1,183 | 1.62 |
| FalkorDB | 56.0 | 2,493 | 2,942 | 18.6 | 3,287 | 0.42 |
| Coming soon1B-scale benchmarks | ||||||
Hover a cell for the slower searches.
Into a running database, 1,000 per request.
What an app waits for with each new record.
Peak, with the typical level marked, under the same 4.5 GB limit.
Saving writes: Neo4j and Elasticsearch save each one to disk before confirming it. Matrie saves on demand, and its time includes the final save. FalkorDB kept writes in memory only, with saving off as in the search tests. Neo4j's offline importer loaded the same 1M records in 19 s, but it only works on an empty, stopped database.
| Engine | Version | How it ran | Searches runcount | Answers checkedcount | Wrongcount↓, lower is better |
|---|---|---|---|---|---|
| Matrie | Development build | Service on a saved snapshot | 957 | 957 | 0 |
| Elasticsearch | 8.19.0 | Server in Docker | 957 | 957 | 0 |
| Neo4j Community | 5.26.30 Community | Server in Docker | 838 | 838 | 0 |
| FalkorDB | 4.22.3 | Server in Docker | 394 | 394 | 0 |
| Engine | Shortms↓, lower is better | Typicalms↓, lower is better | With radiusms↓, lower is better | With required termms↓, lower is better | Broadms↓, lower is better |
|---|---|---|---|---|---|
| Matrie | 6.19 | 52.5 | 3.94 | 18.0 | 46.6 |
| Elasticsearch | 15.1 | 102 | 17.7 | 72.4 | 60.4 |
| Neo4j Community | 1,009 | 1,588 | 1,775 | 2,486 | 1,384 |
| FalkorDB | 3,400 | 3,586 | 3,935 | 5,091 | 3,578 |
95 of every 100 searches finished within this time.
| Engine | Searches a secondper s↑, higher is better | Searches in one minuteper min↑, higher is better |
|---|---|---|
| Matrie | 93.4 | 5,604 |
| Elasticsearch | 56.8 | 3,409 |
| Neo4j Community | 1.62 | 97 |
| FalkorDB | 0.42 | 25 |
| Engine | Write 1M, runningtime↓, lower is better | One at a timeper s↑, higher is better | New + similarms↓, lower is better | Initial bulk loads↓, lower is better | Peak memoryMB↓, lower is better | DiskMB↓, lower is better |
|---|---|---|---|---|---|---|
| Matrie | 17 s | 2,223 | 23.9 | 20 | 996 | 164 |
| Elasticsearch | 33 s | 319 | 45.8 | 27 | 3,149 | 119 |
| FalkorDB | 109 s | 1,029 | 5,841 | 26 | 2,892 | RAM only |
| Neo4j Community | 2.6 min | 447 | 3,014 | 19 | 3,473 | 1,071 |
"Write 1M, running" and "New + similar" are the charts above. "One at a time" is one record per request, for a minute. The bulk load uses each engine's own bulk tool. None of these includes reading free text, which the full pipeline does. Memory was read every 2 seconds.
Same test, same 1M records, same limits. A tick marks the better result, ↓ means lower is better and ↑ higher, and bars are to scale.
244× faster on a typical search
Choose Neo4j for multi-hop queries, Cypher and graph algorithms.
868× faster on a typical search
Choose FalkorDB for multi-hop traversal with Cypher, and GraphRAG tooling.
1.9× faster on a typical search
Choose Elasticsearch for full-text relevance, vector search and scale-out today.
The same engines and conditions, on your records, as part of a pilot.
| Capability | Matrie | Neo4j | FalkorDB | Elasticsearch |
|---|---|---|---|---|
| Best suited for | One-hop matching and ranking | Multi-hop graph queries | Fast graph traversal | Full-text search and analytics |
| Records stay in your database | An index only | Copied into Neo4j | Copied, in memory | Copied into indices |
| Text to facts, with no LLM | Built in, from your taxonomy | Yours to build | Yours to build | Text analysis; the mapping is yours |
| Pipeline and sync built in | Connectors, extraction, sync | Import tools, LOAD CSV | CSV bulk loader | Connectors, ingest pipelines |
| Must-have rules, no code | Set in configuration | Written into each query | Written into each query | Filters in each query |
| Weighted ranking, no code | Weights per group of terms | Coded into each query | Coded into each query | Scoring in each query |
| Location radius | Built in | point.distance | distance() | geo_distance |
| Graph traversal | One hop, plus two-hop similarity | Any depth | Any depth | None |
| Query language | openCypher, coming soon. API and MCP tools today | Cypher | A subset of openCypher | Query DSL, ES|QL |
| Vector search | Not built in | Vector indexes | Vector indexes | kNN on dense vectors |
| MCP for agents | Built in, 12 tools | Official server | Available | Agent Builder server |
| Durability and scale-out | Snapshots; one machine today | ACID; clusters in Enterprise | RDB and AOF, replication | Shards and replicas |
From vendor documentation read on 2 November 2026, in our words: Neo4j, FalkorDB, Elasticsearch.
Pricing depends on your workload. Tell us how many records you have and how many searches you expect, and we'll send you a quote.
Ask for a priceYou describe what matters in your domain: its categories, its terms, other words for those terms, and which ones are must-haves. Matrie builds the graph from that description, so results follow rules you can read and change.
Yes, with a narrow focus. It holds a knowledge graph of your records and the terms that describe them, stored as a matrix. It answers one-hop matches and two-hop similarity. It doesn't run arbitrary paths or graph algorithms, so if you need those, choose Neo4j or FalkorDB. Support for openCypher, the open graph query language, is coming soon.
Not when data loads or when someone searches. The optional Auto Enhancer uses a small model on your own hardware to rate the key phrases it suggests.
Yes, as the retrieval step. Rules narrow millions of documents to the few worth sending to your model, and agents call it over MCP. Matrie finds and ranks. It doesn't write answers, and it has no vector search.
They run graph queries over tables you've already structured. Matrie also reads the free text in your records and maps it to your taxonomy. In both cases the source data stays where it is.
Source text stays in your databases. Matrie reads it to build the index and when someone opens a record, and doesn't keep it. The index holds ids, coded keywords and coordinates, and connection passwords are stored encrypted. Coded keywords can still be sensitive, so protect the index as you would any internal data store.
MongoDB and PostgreSQL today, with support for other databases on the way. Tell us what you use, and we'll tell you when it's ready.
1,000,000 records built from our real dataset of 358,452. Every engine handles that size on one machine, so the comparison is about the engines rather than how much memory each was given. 1B-scale benchmarks are coming soon. The evidence section shows how we built them.
Matrie saves snapshots, which are saved copies of the index, so a crash loses changes made since the last one. A re-sync restores them from your databases, which stay the source of truth. Today Matrie runs on a single machine.
Soon. Leave your details and we'll let you know when it opens. We can also run the benchmark on your own data.
Leave your details and we'll tell you when the demo opens. Ask about pricing or a pilot on your own data any time.