【发布时间】: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