0

我有一个共同的实体类:

@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

4

1 回答 1

0

数字字段的索引默认为数值,然后以不同的方式存储在 lucene 中,这意味着必须使用NumericRangeQuery,这是在Neo4jTemplate.lookup方法内部完成的。

如果您不想以数字方式索引数据,请使用@Indexed(numeric=false). 然后它被索引为一个字符串,并通过密码和字符串索引查找找到。

于 2012-11-26T10:45:43.240 回答