【问题标题】:spring data elasticsearch inheritence no results on queryspring data elasticsearch继承没有查询结果
【发布时间】:2016-11-01 02:44:07
【问题描述】:

我在继承和 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) 它不起作用(空结果) 解析 findByUri 的异常

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

我的发现:如果我将 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\:bar => 解析异常。

uri = "foo\:bar" => 解析异常

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

非常感谢任何帮助/建议/cmets。请。非常感谢

【问题讨论】:

  • 您好,您是否找到了在 spring data elasticsearch 中使用抽象类的任何解决方案,因为我在使用 spring-data-elasticsearch 时遇到了问题,并且互联网上没有任何示例/参考资料。跨度>
  • 如果查询索引里面有数据吗?试试curl http://localhost:9200/_cat/indices

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


【解决方案1】:

试试下面的方法。

findByFatherUri(uri);

这就是子实体的工作方式。我认为扩展类也一样。从 Spring Data 的角度来看,主类是 DataBnfRepository 的 SonA,当您使用 findOne 方法时,它的 id 是链接到 Repository 的类。您必须遍历子类到您尝试使用的字段来查找对象。因为,我不确定 100%,请在您尝试后告诉我这是否有效。

【讨论】:

  • 它不起作用(暂时)我有错误:没有找到类型 SonA 的属性 FatherUri。但是感谢您的帮助,我期待这个可能的解决方案,也许有一个技巧。
  • 好吧,对不起。快速提问,DataBnfEntity'? and how it is related to sonA? Are these same? If they are same, why do you have it as abstract class? If DataBnfEntity 是sonA 的父级,你必须像findByDataBnfEntitySonAFatherUri(uri) 一样从DataBnfEntity 遍历到Father
  • 对不起,我也忘了重命名它。 DataBnfEntity => SonA(我在 RDF 数据库上工作,但我过滤了信息)编辑了问题,对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
相关资源
最近更新 更多