0

我正在尝试使用 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);
}

或者可能作为哈希图返回。我的问题是我不清楚如何将这些结果中的任何一个转换为可供 Graphaware 框架使用的 Node 对象,或者我应该如何获取 Node 对象。

4

1 回答 1

3

如果你在嵌入式模式下运行 Neo4j,你无论如何都可以访问GraphDatabaseService.

在您的Person实体中,您可以访问GraphId作为节点内部 ID 的属性。

因此,您可以,例如在您的自定义 RecommendationService 中,检索Node此 id 的对象:

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 ://github.com/graphaware/recommendations-meetup

于 2015-11-07T13:01:25.867 回答