我有一个共同的实体类:
@NodeEntity
public class Entity {
/*** Common Fields ***/
@GraphId
protected Long nodeId;
@Indexed(level = Indexed.Level.INSTANCE)
protected Long id;
@Indexed(level = Indexed.Level.INSTANCE)
protected String someProperty;
...
}
扩展Entiy类的Employee类:
public class Employee extends Entity {
@Indexed
private String someOtherProperty;
...
}
我在测试中注意到:
@Autowired private GraphDatabaseService service;
Node node1 = service.index().forNodes("Employee").get("id", 1l).getSingle();
不会返回任何值,而
Node node2 = service.index().forNodes("Employee").get("someProperty", "someValue").getSingle();
Node node3 = service.index().forNodes("Employee").get("someOtherProperty", "someOtherValue").getSingle();
两者都按预期返回。
我尝试将“id”的名称更改为其他文字,并使用1(数字)和“1”(字符串)进行搜索,但它仍然是相同的情况。我怀疑它与数值有关。
所以我想我可能会以错误的方式使用@Indexed吗?
使用: neo4j-version:1.8 spring-data-neo4j.version:2.1.0.RC4
答案 0 :(得分:0)
数字字段的索引默认为数值,然后以不同的方式存储在lucene中,这意味着必须使用NumericRangeQuery
,这是在Neo4jTemplate.lookup
方法内部完成的。
如果您不想以数字方式索引数据,请使用@Indexed(numeric=false)
。然后将其编入索引,并通过密码和字符串索引查找找到。