我尝试使用graphAware的neo4j推荐引擎(https://github.com/graphaware/neo4j-reco)。我对很多涉及的技术都很陌生,但据我所知,在我建立了推荐引擎后,我运行以下内容来获取我的建议:
List<Recommendation<Node>> recoForVince = recommendationEngine.recommend(getPersonByName("Vince"), new SimpleConfig(2));
示例getPersonByName是这样的:
private Node getPersonByName(String name) {
return IterableUtils.getSingle(getDatabase().findNodes(DynamicLabel.label("Person"), "name", name));
}
问题是据我所知,只有嵌入你的neo4j服务器才会有效。我们正在考虑将spring用于我们的mvc设置,并且我们将使用类似的东西:
我们将使用以下内容获取数据:
@Repository
public interface PersonRepository extends GraphRepository<Person> {
@Query("MATCH (p:Person) WHERE m.name = {name} RETURN p")
Person findByTitleContaining(@Param("name") String name);
}
或者可能作为Hashmap返回。我的问题是我不清楚如何将这些结果中的任何一个转换为可由Graphaware框架使用的Node对象,或者我应该如何获取Node对象。
答案 0 :(得分:3)
如果您在嵌入模式下运行Neo4j,您将无论如何都可以访问GraphDatabaseService
。
在您的Person
实体中,您可以访问GraphId
属性,该属性是节点内部ID。
因此,您可以在自定义RecommendationService中检索此ID的Node
对象:
private final GraphDatabaseService database;
private final MyRecommendationEngine engine;
@Autowired
public RecommendationService(GraphDatabaseService database, MyRecommendationEngine engine) {
this.database = database;
this.engine = engine;
public List<Recommendation<Node>> processRecommendation(Person person) {
Node node = database.getNodeById(person.getId());
return engine.recommend(node);
}
请注意,这会返回Node
个对象,如果您想将它们转换为您自己需要处理补水的Person
个实体。
如果您在ServerMode中运行Neo4j并且SDN4处于您的应用程序级别,那么最好是对Neo4j-Reco插件提供的端点进行http请求调用。您只能传递Person的名称或他的id。
您可以在此处查看示例:https://pub.dartlang.org/packages/linter