Implement Tag-based e/p model for Neo4j backend (v0.36.0)
Some checks failed
Go / build-and-release (push) Has been cancelled
Some checks failed
Go / build-and-release (push) Has been cancelled
- Add unified Tag-based model where e/p tags create intermediate Tag nodes with REFERENCES relationships to Event/NostrUser nodes - Update save-event.go: addPTagsInBatches and addETagsInBatches now create Tag nodes with TAGGED_WITH and REFERENCES relationships - Update delete.go: CheckForDeleted uses Tag traversal for kind 5 detection - Add v3 migration in migrations.go to convert existing direct REFERENCES and MENTIONS relationships to the new Tag-based model - Create comprehensive test file tag_model_test.go with 15+ test functions covering Tag model, filter queries, migrations, and deletion detection - Update save-event_test.go to verify new Tag-based relationship patterns - Update WOT_SPEC.md with Tag-Based References documentation section - Update CLAUDE.md and README.md with Neo4j Tag-based model documentation - Bump version to v0.36.0 This change enables #e and #p filter queries to work correctly by storing all tags (including e/p) through intermediate Tag nodes. Files modified: - pkg/neo4j/save-event.go: Tag-based e/p relationship creation - pkg/neo4j/delete.go: Tag traversal for deletion detection - pkg/neo4j/migrations.go: v3 migration for existing data - pkg/neo4j/tag_model_test.go: New comprehensive test file - pkg/neo4j/save-event_test.go: Updated for new model - pkg/neo4j/WOT_SPEC.md: Tag-Based References documentation - pkg/neo4j/README.md: Architecture and example queries - CLAUDE.md: Repository documentation update - pkg/version/version: Bump to v0.36.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -125,6 +125,40 @@ Legacy node label that is redundant with SetOfNostrUserWotMetricsCards. Should b
|
||||
|
||||
### Relationship Types
|
||||
|
||||
#### Tag-Based References (e and p tags)
|
||||
|
||||
The Neo4j backend uses a unified Tag-based model for `e` and `p` tags, enabling consistent tag querying while maintaining graph traversal capabilities.
|
||||
|
||||
**E-tags (Event References):**
|
||||
```
|
||||
(Event)-[:TAGGED_WITH]->(Tag {type: 'e', value: <event_id>})-[:REFERENCES]->(Event)
|
||||
```
|
||||
|
||||
**P-tags (Pubkey Mentions):**
|
||||
```
|
||||
(Event)-[:TAGGED_WITH]->(Tag {type: 'p', value: <pubkey>})-[:REFERENCES]->(NostrUser)
|
||||
```
|
||||
|
||||
This model provides:
|
||||
- Unified tag querying via `#e` and `#p` filters (same as other tags)
|
||||
- Graph traversal from events to referenced events/users
|
||||
- Consistent indexing through existing Tag node indexes
|
||||
|
||||
**Query Examples:**
|
||||
```cypher
|
||||
-- Find all events that reference a specific event
|
||||
MATCH (e:Event)-[:TAGGED_WITH]->(t:Tag {type: 'e', value: $eventId})-[:REFERENCES]->(ref:Event)
|
||||
RETURN e
|
||||
|
||||
-- Find all events that mention a specific pubkey
|
||||
MATCH (e:Event)-[:TAGGED_WITH]->(t:Tag {type: 'p', value: $pubkey})-[:REFERENCES]->(u:NostrUser)
|
||||
RETURN e
|
||||
|
||||
-- Count references to an event (thread replies)
|
||||
MATCH (t:Tag {type: 'e', value: $eventId})<-[:TAGGED_WITH]-(e:Event)
|
||||
RETURN count(e) AS replyCount
|
||||
```
|
||||
|
||||
#### 1. FOLLOWS
|
||||
|
||||
Represents a follow relationship between users (derived from kind 3 events).
|
||||
@@ -247,8 +281,9 @@ Comprehensive implementation with additional features:
|
||||
- `IS_A_REACTION_TO` (kind 7 reactions)
|
||||
- `IS_A_RESPONSE_TO` (kind 1 replies)
|
||||
- `IS_A_REPOST_OF` (kind 6, kind 16 reposts)
|
||||
- `P_TAGGED` (p-tag mentions from events to users)
|
||||
- `E_TAGGED` (e-tag references from events to events)
|
||||
- Tag-based references (see "Tag-Based References" section above):
|
||||
- `Event-[:TAGGED_WITH]->Tag{type:'p'}-[:REFERENCES]->NostrUser` (p-tag mentions)
|
||||
- `Event-[:TAGGED_WITH]->Tag{type:'e'}-[:REFERENCES]->Event` (e-tag references)
|
||||
- NostrRelay, CashuMint nodes for ecosystem mapping
|
||||
- Enhanced GrapeRank incorporating zaps, replies, reactions
|
||||
|
||||
|
||||
Reference in New Issue
Block a user