spring data elasticsearch inheritence对查询

时间:2016-06-29 11:54:57

标签: spring inheritance elasticsearch spring-boot spring-data-elasticsearch

我在继承和ElasticsearchRepository方面遇到了一些麻烦。 我的代码(简短版): 实体:

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()它就可以了。 如果我执行repository.findWithUri(uri)它不起作用(null结果) 解析findByUri的异常

我试图搜索例子: https://github.com/spring-projects/spring-data-elasticsearch/blob/master/src/test/java/org/springframework/data/elasticsearch/entities/SampleInheritedEntity.java 但是没有存储库。

我发现:如果我用&#34; foo&#34;替换uri,它就可以了。所以问题在于https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters

所以我用

进行了测试

uri = foo:bar =&gt;解析异常。

uri =&#34; foo:bar&#34; =&GT;解析异常。

uri = foo \:bar =&gt;解析异常。

uri =&#34; foo \:bar&#34; =&GT;解析异常

在继承之前,我对代码没有任何问题。 我只是将URI放在一个对象repository.save(object)repository.findWithUri(uri)中,它给了我对象。

非常感谢任何帮助/建议/评论。请。非常感谢你

1 个答案:

答案 0 :(得分:0)

尝试以下方法。

findByFatherUri(uri);

这就是它对儿童实体的作用。我认为扩展类也是一样的。从Spring Data的角度来看,主类是DataBnfRepository的SonA,它的id是使用findOne方法时链接到Repository的id。您必须遍历子类到您尝试用于查找对象的字段。因为,我不确定100%,让我知道一旦你尝试过这是否有效。