来自继承的@NodeEntity的索引不会返回预期结果

时间:2012-11-24 15:55:20

标签: neo4j spring-data-neo4j

我有一个共同的实体类:

@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

1 个答案:

答案 0 :(得分:0)

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

如果您不想以数字方式索引数据,请使用@Indexed(numeric=false)。然后将其编入索引,并通过密码和字符串索引查找找到。