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;        

    ...
}

Entity クラスを拡張する 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 に答える