在ElasticsearchRepository中是否有使用规范的方法?

12
我已经为我的JpaRepositories实现了规范模式以对其进行过滤。在我实现了规范之后,可以像这样与JpaRepository一起使用: Page<Entity> page = entityJpaRepository.findAll(entitySpecification, pageable) 是否有支持在ElasticsearchRepository中支持规范的功能或计划中的功能?
2个回答

1
我了解你的痛苦,但是问题在于Specification接口属于JPA API,目前没有任何一个Elastic Search Spring Data存储库实现它,而且我认为他们也不会这样做。如果你真的想使用它们,最好从基于JPA的存储库迁移到来自spring-data-elasticsearch的ElasticsearchRepository。
我自己没有尝试过将JPA与ElasticSearch一起使用,但注意到有些人这样做,可以查看此链接:

https://programmertoday.com/spring-boot-elastic-search-with-spring-data-jpa/


0
我不了解“规范”,但Spring提供了一个名为“ElasticsearchOperations”的bean,它有一个“search”方法,可以接受类似于标准Hibernate“Criteria”的org.springframework.data.elasticsearch.core.query.CriteriaQuery。尝试将“规范”映射到“CriteriaQuery”。
@Service
@RequiredArgsConstructor
public class FooService {

  private final ElasticsearchOperations elasticsearchTemplate; // autowired bean

  public void search() {
    Criteria criteria = new Criteria();
    criteria.and(new Criteria("foo").is(foo));
    criteria.and(new Criteria("bar").in(bars));
    CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
    elasticsearchOperations.search(criteriaQuery, 
        FooElasticEntity.class).stream()
           .map(SearchHit::getContent)
           .collect(Collectors.toList())
  }
}

另外值得注意的是,有一个名为 SearchHitSupport 的实用类,它为 Pageable 添加了支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接