`

Neo4j: Index and Lables with SDN

阅读更多

In model, in order to index some property, you should anotate it with @Index.    SDN now adopt schema-based index policy, which means the Entity class name will be used as lable.

 

@NodeEntity
@XmlRootElement
@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    @Indexed
    private String name;

    @Indexed(unique = true)
    private String userId;

    @Indexed
    private String phoneNumber;
....

 

 In the above codes, SDN will produce tow labels for this modle  User, _User.

If we want multiply lables for a modle, we could do this by following

    @Labels
    private Set<String> lables;

    public Set<String> getLables() {
	return lables;
    }

    public void setLables(Set<String> lables) {
	this.lables = lables;
    }

    public void addLable(String lable) {
	if (this.lables == null)
	    this.lables = new HashSet<String>();

	lables.add(lable);
    }

    public void delLable(String lable){
	 if(this.lables!=null & this.lables.contains(lable))
	     lables.remove(lable);
    }

 

We can add lables for a node in extention

@Path("/addLable/active/{userName}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response activeUser(final @PathParam("userName") String userName) throws JSONException {
	try (Transaction tx = template.getGraphDatabaseService().beginTx()) {
	    User user = userRepo.getUserByName(userName);
	    if(user != null){
		user.addLable(FIFOLabels.ActiveUser.name());
		userRepo.saveOnly(user);
	    }else{
		return Response.status(Status.NOT_FOUND).entity("User doesn't exist").build();
	    }
	    
	    tx.success();
	}
	return Response.status(Status.OK).entity(OK_MSG).build();
    }

----------------------------------------------------------------------

But a failure comes in other modle using  @Lables,

java.lang.NullPointerException
        at org.springframework.data.neo4j.fieldaccess.
LabelFieldAccessorFactory$LabelFieldAccessor.setValue
(LabelFieldAccessorFactory.java:73)
        at org.springframework.data.neo4j.fieldaccess.
DefaultEntityState.setValue(DefaultEntityState.java:113)

 

Model Cods

  @Labels
    private Set<String> lables;

    public Set<String> getLables() {
	return lables;
    }

    public void setLables(Set<String> lables) {
	this.lables = lables;
    }

    public void addLable(String lable) {
	if (this.lables == null)
	    this.lables = new HashSet<String>();

	lables.add(lable);
    }

    public void delLable(String lable) {
	if (this.lables != null & this.lables.contains(lable))
	    lables.remove(lable);
    }

    @Indexed(indexType = IndexType.POINT, indexName = "TaskLocation")
    String wkt;

    public void setLocation(float lon, float lat) {
	this.wkt = String.format("POINT( %.2f %.2f )", lon, lat);
    }

    public Task() {

    }

    public Task(String taskId, String title, String description) {
	this.taskId = taskId;
	this.title = title;
	this.description = description; 
    }

 

 The reasons I guess is that I used legency Index type .

 

@Indexed(indexType = IndexType.POINT, indexName = "TaskLocation")
    String wkt;

But,when I save a Task node by set it's lable, there is no error.

 

 @Path("/addTask")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response addTask(Task task) {
	logger.info("############# add new task ########################");
	logger.info("task:" + task.toString());
        task.addLable("NewTask");
	taskRepo.saveOnly(task);
	return Response.status(Status.OK).entity(OK_MSG).build();
    }

 When comment this add lable command, error comes

//task.addLable("NewTask");

 Why? 

 

Labels Set not initialized when using @Labels annotation

 https://jira.spring.io/browse/DATAGRAPH-541

 

It turns out that this is a bug in SDN.

Good news is that I solved this problem by manually initilize  @Labels filed in constuctor

 public Task() {
	this.lables = new HashSet<String>();
	this.lables.add("Task");
	this.lables.add("_Task");
    }

 

 

 

 

 

 

 

 

 

References

http://graphaware.com/neo4j/2015/01/16/neo4j-graph-model-design-labels-versus-indexed-properties.html

http://stackoverflow.com/questions/22075802/spring-data-neo4j-3-0-0-labels-support

http://stackoverflow.com/questions/28272953/how-to-use-labels-spring-data-neo4j

http://stackoverflow.com/questions/28475023/how-to-add-labels-to-nodes-using-spring-data-neo4j

https://github.com/spring-projects/spring-data-neo4j/blob/15cc8418ed4d429a952b86f788717add8a93f76c/spring-data-neo4j-aspects/src/test/java/org/springframework/data/neo4j/aspects/Person.java

 

分享到:
评论

相关推荐

    vue-neo4j:vue使用D3对neo4 j进行可视化-源码开发技术-其它

    Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...

    vue-neo4j:vue使用D3对neo4j进行可视化源码开发技术-其它

    Neo4j Vue 安装步骤 克隆或下载该库到本地 下载neo4j并安装到本地,启动neo4j服务 进入到该工程的根目录,输入命令:npm run update进行npm包的导入 使用命令:npm run dev启动该工程 默认端口是:8081 neo4j账号...

    movies-java-spring-data-neo4j:使用Spring Data Neo4j的Neo4j电影示例

    仍然可以在下访问使用SDN 5 + OGM的先前版本。分支。 笔记有关具有相同数据集的Spring Data Neo4j 6的更广泛概述,可以访问分支。 上详细描述了示例项目。 该项目使用Java 11。堆栈这些是我们的Web应用程序的组件: ...

    neo4j-jdbc:带有BOLT协议的Neo4j 3.x的Neo4j JDBC驱动程序

    该驱动程序支持各种类型的数据库传输: 通过使用jdbc:neo4j:bolt://&lt;host&gt;:&lt;port&gt;/的Bolt协议(3.0.x至3.2.x) 通过使用jdbc:neo4j:http://&lt;host&gt;:&lt;port&gt;/的HTTP协议(2.x +) 展望未来,还将支持: 直接文件连接...

    vue-neo4j:vue使用D3对neo4j进行可视化

    Neo4j Vue安装步骤克隆或下载该库到本地下载neo4j并安装到本地,启动neo4j服务进入到该工程的根目录,输入命令:npm run update进行npm包的导入使用命令:npm run dev启动该工程默认端口是:8081 neo4j账号信息: ...

    sails-restful-neo4j:SailsWaterline RESTful Neo4j 适配器

    宁静的 Neo4j 2.1+ 用于 Neo4j 宁静 apis 的 Sails.js 水线适配器安装从 NPM 安装。 $ npm install sails-restful-neo4j兼容性这与风帆 0.10 及更高版本兼容帆配置将以下配置添加到 config/connections.js 文件中: ...

    bitnami-docker-neo4j:Neo4j的Bitnami Docker映像

    DR $ docker run --name neo4j bitnami/neo4j:latestDocker撰写$ curl -sSL https://raw.githubusercontent.com/bitnami/bitnami-docker-neo4j/master/docker-compose.yml &gt; docker-compose.yml$ docker-compose up...

    neo4j-community-3.5.12-windows.zip

    **Neo4J社区版3.5.12 Windows安装与使用指南** Neo4J是一款流行的图数据库管理系统,尤其适用于处理复杂关系数据。图数据库利用图形结构来存储和查询数据,其核心理念是节点、边(关系)和属性,这使得在处理网络、...

    email2neo4j:使用一个简单的命令将您的电子邮件导入图表

    imap2neo4j: imap2neo4j imapServer imapUsername imapPassword imapMailbox neo4jServer [neo4jUsername] [neo4jPassword] [paging, eg import by batches of 1000] [specific range of messages, eg 50

    Nested-Class-Models-Rest-Api-Neo4j:在休息环境中作为 neo4j 扩展实现的嵌套类模型

    通过在 conf/neo4j-server.properties 中添加一行来配置 Neo4j: org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.example.unmanagedextension=/example 启动 Neo4j 服务器。 写评论 curl ...

    Beginning.Neo4j.1484212

    This book will take you from the installation of Neo4j through to building a full application with Neo4j at its heart, and everything in between. Using this book, you'll get everything up and ...

    Sublime-Neo4j:用于运行 Neo4j Cypher 查询的 Sublime 插件

    Sublime Text 2/3 插件:Neo4j Sublime 是最好的跨平台编辑器之一,所以我想为什么不创建一个简单的 Neo4j 插件呢?... 编辑用户名和密码(默认为neo4j:neo) 结果显示在控制台中(Ctrl+~)打开C

    spring-data-neo4j:SDN 4

    **Spring Data Neo4j (SDN) 4详解** Spring Data Neo4j(SDN)是Spring框架的一个扩展,专门用于处理与Neo4j图形数据库的交互。在Java开发中,SDN 4提供了一种简化的方式来操作和管理图形数据,使开发者能够充分...

    egg-neo4j:Neo4j鸡蛋插件

    egg-neo4j Neo4j用于鸡蛋框架。安装$ npm i egg-neo4j --save用法// {app_root}/config/plugin.jsexports . neo4j = { enable : true , package : 'egg-neo4j' ,} ;配置// {app_root}/config/config.default....

    schemaless-graphql-neo4j:将无类型和动态GraphQL查询转换为Cypher

    schemaless-graphql-neo4j 将无类型的动态GraphQL查询转换为Cypher。 签出,以更好地查看您可以编写的查询。入门$ npm install schemaless-graphql-neo4j :warning: 图书馆尚未发布操场您可以开始使用开发人员游乐场...

    nodejs-on-neo4j:Neo4j上的NodeJS的简单PoC

    **Node.js on Neo4j: 在图形数据库上构建应用** 标题中的"nodejs-on-neo4j"指的是一项使用Node.js与Neo4j图形数据库交互的实践项目。这个项目通常涉及利用Node.js的灵活性和Neo4j的强大图数据处理能力来开发应用...

    spring-graph-neo4j:Neo4j的春天

    标题中的“spring-graph-neo4j:Neo4j的春天”暗示了我们将探讨Spring框架与图数据库Neo4j的结合使用。在Java开发领域,Spring框架是一个广泛使用的开源框架,它提供了一整套用于构建企业级应用的服务和工具。而Neo4j...

    neo4j:所有人的图表

    【标题】"neo4j:所有人的图表"指的是开源图数据库管理系统Neo4j,它将数据以图形结构的形式存储和处理,便于理解复杂的关系。在信息化时代,数据之间的关联性日益增强,图数据库如Neo4j应运而生,成为理解和分析...

    NBD_Tutorials_Neo4J:PJATK NDB教程的Neo4J分配

    【标题】:“NBD_Tutorials_Neo4J:PJATK NDB教程的Neo4J分配” 【描述】:“NBD_Tutorials_Neo4J”指的是一个关于使用Neo4J数据库进行数据处理和分析的教程,特别关注的是与PJATK(Probabilistic Joint Anomaly ...

    Laravel开发-neo4j-php-ogm

    'Neo4j' =&gt; Neo4j\OGM\Facades\Neo4j::class, ], ``` 5. **配置服务**:在`app/Providers/AppServiceProvider.php`的`boot`方法中加载配置文件和启动Neo4j客户端: ```php public function boot() { $this-&gt;app-&gt;...

Global site tag (gtag.js) - Google Analytics