当前位置: 首页 > 知识库问答 >
问题:

在Spring数据elasticsearch中使用@Query进行SpEL

酆奇文
2023-03-14

我在ES上运行查询,但参数的数量正在增加(由于业务原因)。

根据Spring数据弹性搜索中的文档,您可以使用@Query和有序参数,如?0?1等,用于方法签名中给出的参数,但这种方法似乎有点不舒服

是否可以进行类似于:#{#myParam.myPropOfMyParam}的查询,换句话说,使用SpEL访问参数属性?

而不是以一系列参数的方法结束,比如

@Query("match.... ?0,.. ?1, ?2")
Page<Doc> findBy(String arg1, String arg2, String arg3, Pageable pageable)

更像jpa使用的spring数据



public interface CompanyDocRepo extends ElasticsearchRepository<CompanyDoc, UUID> {

    @Query(value =
            "{\n" +
                    "  \"multi_match\": {\n" +
                    "    \"query\": \"#{#keyword['somevalue']}\",\n" +
                    "    \"fields\": [\n" +
                    "      \"name\",\n" +
                    "      \"description\",\n" +
                    "      \"city\",\n" +
                    "      \"department\",\n" +
                    "      \"sectors.sector.descriptionSector\",\n" +
                    "      \"sectors.sector.description\",\n" +
                    "      \"sectors.sector.name\",\n" +
                    "      \"interests.name\"\n" +
                    "    ]\n" +
                    "  }\n" +
                    "}\n")
    Page<CompanyDoc> findByKeyword(@Param("keyword") Map<String,String> keyword, Pageable pageable);

   
}

或者是否有其他方法可以在不离开spring数据接口的情况下进行查询?

共有1个答案

范云
2023-03-14

目前这是不可能的。您可能希望在上为此创建一个问题https://github.com/spring-projects/spring-data-elasticsearch/issues

 类似资料:
  • 目前,下面的查询只返回10个搜索点击。我想把它增加到100。怎么做??

  • 我正在使用mssql和spring数据JPA,我想通过使用自定义查询注释将新记录插入到表中。 它的给定错误, 原因:组织。冬眠hql。内部的ast。QuerySyntaxException:应为打开,在第1行第23列[插入到客户值(?1,?2)]附近找到“值” 我也试过下面,同样的错误。

  • 问题内容: 嗨,我正在使用elasticsearchSpring数据。我项目的领域结构不断变化,因此我必须删除索引才能每次更改映射。为了克服这个问题,我使用了别名。我使用以下方法创建了别名: 我有一个测试课: TestRepository类: 我的问题是如何从别名而不是索引本身读取?是否对别名也进行写操作。我看过以下链接:https : //www.elastic.co/guide/en/elas

  • 问题内容: 我在Titan上使用Elastic Search。如何用泰坦在ES中进行分页? 我看到了这个,所以尝试了这个: 事情是它返回所有4-5个记录,而不是2的大小 问题答案: 参数尚不支持。该方法仅存在于将来的实现中。但是,您目前可以限制结果。下面的代码应该工作: …但是您不能指定偏移量。 干杯,丹尼尔

  • 我正在配置elasticsearch spring应用程序,并遵循我创建的RestHighLevelClient文档: 现在我希望我所有的文档都有snake_case的命名策略,在文档上这是我发现的: 在没有进一步配置的情况下,Spring Data Elasticsearch将使用对象的属性名称作为Elasticsearch中的字段名称。这可以通过使用该属性上的@Field注释来更改单个字段。

  • 我正在用spring数据创建一个带有空日期检查的spel动态查询。我的疑问是: 当我使用有效日期运行此查询时,它可以工作,但当我传递空日期时,我会得到以下错误: 堆栈跟踪: