私は継承と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)
、それは私にオブジェクトを与えます。
ご意見、ご提案、ご感想をお待ちしております。お願いします。ありがとうございました
これは動作しません(現時点で)私はエラーがあります:NoプロパティーFatherUriがSonA型で見つかりました。しかし、助けてくれてありがとう、私はこの可能な解決策を楽しみにしている、多分それをするためのトリックがある。 –
Okies、申し訳ありません。しかし、簡単な質問ですが、 'DataBnfEntity 'とは何ですか?どのようにsonAに関連しているのですか?これらは同じですか?彼らが同じであれば、なぜそれを抽象クラスとして持っていますか? 'DataBnfEntity'がsonAの親である場合、' findByDataBnfEntitySonAFatherUri(uri) 'のように' DataBnfEntity'から 'Father'に移動する必要があります。 – techtabu
申し訳ありません名前を変更するのも忘れました。 DataBnfEntity => SonA(私はRDFデータベースで作業しますが、情報をフィルタリングしました) 質問を編集しました。申し訳ありません。 –