smalltalk-neo4j

Details

Source
GitHub
Dialect
pharo (40% confidence)
Stars
6
Forks
1
Created
Aug. 28, 2017
Updated
July 11, 2025
Topics
cypher neo4j pharo smalltalk

README excerpt

# Manipulating Neo4j from Pharo Smalltalk

Sample code to manipulate Neo4j data from Pharo Smalltalk via Cypher queries, using Neo4reSt and SCypher libraries.

## Installation
```smalltalk
Metacello new
    baseline: 'Neo4jSample';
    repository: 'github://github.com/quentinplessis/smalltalk-neo4j:v0.1/pharo-repository';
    load.
```
Package: Neo4j-Sample

## Neo4j environment
A Neo4j docker image containing sample data is provided.
Docker and ruby must be installed and running.

## Launch Neo4j
```shell
ruby setup.rb start
```

## Stop Neo4j
```shell
ruby setup.rb stop
```

## Sample code
### Get Started
```smalltalk
N4Settings default rootUri: 'http://localhost:7474/db/data/'. 

"Arguments"
scenarioA := Neo4jScenarioA new.
scenarioA debug: true.
scenarioA q11_movies.
scenarioA q12_moviesDirector: 'James Cameron' actor: 'Leonardo DiCaprio'.
scenarioA q13_moviesDirector: 'James Cameron' actorBornIn: 'California'.
scenarioA q14_moviesDirector: 'James Cameron' actorBornIn: 'California'.

"Multi"
argumentsList := { 
	{
		'director' -> 'James Cameron'.
		'birthplaceRegex' -> '.*California.*'.
	} asDictionary.
	{
		'director' -> 'George Lucas'.
		'birthplaceRegex' -> '.*Washington.*'.
	} asDictionary.
	{
		'director' -> 'Stanley Kubrick'.
		'birthplaceRegex' -> '.*Chicago.*'.
	} asDictionary.
}.
scenarioA q21_moviesWithArgumentList: argumentsList.
scenarioA debug: true.
scenarioA graphDb latency: 0.
scenarioA graphDb latency: 10.
fullArgumentsList := OrderedCollection new.
100 timesRepeat: [ fullArgumentsList addAll: argumentsList ].
scenarioA q21_moviesWithArgumentList: fullArgumentsList.
scenarioA q22_moviesWithArgumentList: fullArgumentsList.

"SCypher"
scenarioA q31_movies: '{language: "en", genre: "Action"}'.
properties := { 
	'language' -> 'en'.
 } asDictionary.
scenarioA q31_movies: properties asJsonString. "Json format not recognized by Neo4j"

scenarioA scypherSamples.
scenarioA q32_moviesWhere: properties.

scenarioA q34_moviesNamed: 'Titanic'.
scenarioA q34_moviesNamed: ''.
scenarioA q34_moviesNamed: nil.
scenarioA debug: true.
scenarioA q35_moviesNamed: 'Titanic'.
scenarioA q35_moviesNamed: ''.
scenarioA q35_moviesNamed: nil.
```

### Simple recommendation engine
```smalltalk

"Recommendation"

scenarioB := Neo4jScenarioB new.
scenarioB debug: true.

personName := 'Yuri'.

scenarioB contentBasedFilteringForUser: personName.
scenarioB scypher_contentBasedFilteringForUser: personName.
scenarioB scypher_contentBasedFilteringForUser: personName rating: 3 limit: 30.
scenarioB scypher_contentBasedFilteringForUser: personName rating: 2 limit: 30.

scenarioB updateUserSimilarities.

scenarioB kNNRecommendationForUser: personName.
scenarioB scypher_kNNRecommendationForUser: personName.
```




← Back to results