spring - spring数据elasticsearch继承没有查询结果

标签 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);
}

我的麻烦:我可以将数据放入 flex 搜索中,但无法检索它们。
如果我执行repository.findall(),它就可以工作。
如果我执行repository.findWithUri(uri),它将不起作用(无效结果)
解析findByUri的异常

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

我发现的结果:如果我用“foo”替换uri,它会起作用。所以问题出在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 \:bar =>解析异常。

uri =“foo \:bar” =>解析异常

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

任何帮助/建议/意见,我们将不胜感激。请。非常感谢

最佳答案

请尝试以下方法。

findByFatherUri(uri);

这就是子实体的工作方式。我认为扩展类也是如此。从Spring Data的 Angular 来看,主类是DataBnfRepository的SonA,并且其id是使用findOne方法时链接到存储库的一个。您必须遍历子类到尝试用于查找对象的字段。由于我不确定100%,一旦您尝试过,请告诉我是否可行。

关于spring - spring数据elasticsearch继承没有查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098792/

相关文章:

spring - Tomcat - PermGen 空间异常

mysql - 使用 jdbc-provider 在 Mule 中配置 Spring Security

java - XML SAX 解析器错误 : value must not contain the '<' character - pointing to TNS value without '<' character

java - 如何从 Groovy Spring 注入(inject)我的 Controller 层

c++ - 从基类继承函数声明中参数的默认值

elasticsearch - 加速elasticsearch more_like_this查询

elasticsearch - 如何为 elasticsearch 解析 ‘530 5.7.0 Must issue a STARTTLS command first. o63-v6sm4041934ywc.36 - gsmtp\n’?

c++ - "is_base_of"的替代实现(检查基础/派生关系)

Java Protobuf(版本 2.4.1)和 Protobuf-net(版本 r480)继承兼容性

Excel 到 ElasticSearch API 请求