0

私は継承とElasticsearchRepositoryでいくつかの問題があります。 私のコード(ショートバージョン): エンティティ:スプリングデータelasticsearch継承クエリで結果がありません

public abstract class father{ 
    @Id 
    protected String identifier; 

    // constructors 
    @Field(type= FieldType.String, index = FieldIndex.not_analyzed) 
    public String uri; 
    // getter setter 
} 

/* 
* Stored in elastic search 
*/ 
@Document(indexName = "entity1", type = "entity1") 
public abstract class sonA extends father{ 
    // constructors 
} 

/* 
* Stored in elastic search 
*/ 
@Document(indexName = "entity2", type = "entity2") 
public abstract class sonB extends father{ 
    // constructors 
} 

リポジトリ:

public interface DataBnfRepository extends 
     ElasticsearchRepository<SonA, String> { 

    public SonA findByUri(String uri); 

    @Query("{ \"filtered\":{ \"filter\":{\"term\":{\"uri\":\"?0\"}}}}") 
    public SonA findWithUri(String uri); 
} 

私の悩み:私はそれらを盗んする弾性検索にデータを入れなくすることができますよ。 私がrepository.findall()を実行すると動作します。 私はそれが(nullの結果を)動作しないrepository.findWithUri(uri)を行う場合findByUri

ため 解析例外私はexemplesを検索してみました: https://github.com/spring-projects/spring-data-elasticsearch/blob/master/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java しかし、誰リポジトリはありません。

私が見つけたもの:私が "foo"でuriを置き換えた場合、それは動作します。バー=>解析例外:だから問題は、だから私は

URI = fooでテストを行ったhttps://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters

です。

uri = "foo:bar" =>解析例外です。

uri = foo \:bar =>解析例外です。

URI = "FOO \:バー" =>解析例外それは私がコードに問題はなかった継承された前

。 私はオブジェクトにURIを入れます。repository.save(object)repository.findWithUri(uri)、それは私にオブジェクトを与えます。

ご意見、ご提案、ご感想をお待ちしております。お願いします。ありがとうございました

答えて

0

次の方法をお試しください。

findByFatherUri(uri); 

これは、子エンティティでの動作の仕組みです。エクステンションクラスでも同じことだと思います。 Spring Dataの観点から見ると、メインクラスはDataBnfRepository用のSonAであり、idはfindOneメソッドを使用するとリポジトリにリンクされたIDです。オブジェクトを見つけるために使用しようとしているフィールドに子クラスをたどる必要があります。以来、私は100%はわからないので、あなたが試した後にこれが動作するかどうかを教えてください。

+0

これは動作しません(現時点で)私はエラーがあります:NoプロパティーFatherUriがSonA型で見つかりました。しかし、助けてくれてありがとう、私はこの可能な解決策を楽しみにしている、多分それをするためのトリックがある。 –

+0

Okies、申し訳ありません。しかし、簡単な質問ですが、 'DataBnfEntity 'とは何ですか?どのようにsonAに関連しているのですか?これらは同じですか?彼らが同じであれば、なぜそれを抽象クラスとして持っていますか? 'DataBnfEntity'がsonAの親である場合、' findByDataBnfEntitySonAFatherUri(uri) 'のように' DataBnfEntity'から 'Father'に移動する必要があります。 – techtabu

+0

申し訳ありません名前を変更するのも忘れました。 DataBnfEntity => SonA(私はRDFデータベースで作業しますが、情報をフィルタリングしました) 質問を編集しました。申し訳ありません。 –

関連する問題