【问题标题】:How do I integrate Spring Data Elasticsearch (Repository Interface) and template queries?如何集成 Spring Data Elasticsearch(存储库接口)和模板查询?
【发布时间】:2020-04-16 00:31:53
【问题描述】:

Elasticsearch 有一个名为template query 的概念,我们可以在其中将模板化查询存储在 Elasticsearch 服务器上。

这是我们如何使用单个参数 firstName 存储此类查询的示例:

POST _scripts/findByProfileFirstName
{
    "script": {
        "lang": "mustache",
        "source": {
          "query": {
            "match": {
              "esCandProfile.firstName": "{{firstName}}"
            }
          }
        }
    }
}

这可以使用以下示例调用:

GET candidates/_search/template
{
    "id": "findByProfileFirstName", 
    "params": {
        "firstName": "Shannon"
    }
}

如何扩展 Spring Data Elasticsearch 以实现以下目标:

public interface CandidateRepository extends ElasticsearchRepository<Candidate, String> {

    @Query("findByProfileFirstName")
    Page<Candidate> findByCustomQuery(@Param("firstName") String firstName, Pageable pageable);
}

为简单起见,请期待以下内容:

  • 模板将在应用程序生命周期之外生成/维护
  • 我愿意不厌其烦地编写此代码一次,以使其适用于所有模板查询

最好在框架的扩展钩子中巧妙地实现这一点的最佳方法是什么?

【问题讨论】:

    标签: elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    为此,我们需要引入一个新的注解,例如@TemplateSearch,因为@Query 用于构建发送到_search 端点的包装查询。这里我们需要使用不同的参数来处理 _search/template 端点。

    SearchOperations 接口需要一个额外的方法,例如 searchByTemplate,它调用 Elasticsearch,并且当使用新注释对存储库方法进行注释时,存储库逻辑需要调整以使用此新方法。

    请创建一个issue for this improvement in Jira

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2021-10-19
      • 2014-09-11
      • 2015-02-13
      • 1970-01-01
      • 2017-09-19
      • 2016-08-29
      相关资源
      最近更新 更多