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 サーバーが組み込まれている場合にのみ機能することです。mvc セットアップに spring を使用することを検討しています。これにより、次のようになります。

次のような方法でデータを取得します。

@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.

エンティティでは、ノードの内部 ID であるプロパティにPersonアクセスできます。GraphId

したがって、たとえばカスタム 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 に答える