0

我在 Spring 中定义了这个接口,用于查询 Elascticsearch。我添加了@Query 注释来完成一些过滤。

public interface ObjectElasticSearch extends ElasticsearchRepository<ElasticObject, String> {

@Query("{\"query\" : {\"filtered\" : {\"filter\" : { \"and\" : [ { \"term\" : { \"firstName\" : \":firstName\" }}, { \"term\" : { \"lastName\" : \"Baggins\" }} ] }}}}")
List<ElasticObject> findByDocFirstNameAndDocLastName(@Param("firstName") String firstName,
        @Param("lastName") String lastName);
};

@Query 注释被完全忽略。如您所见,我尝试对姓氏进行硬编码,但这对查询结果没有影响。如果我删除查询字符串中的大括号,我不会收到任何错误。查询仍然有效,过滤被忽略,它返回所有匹配项。

有人可以帮我弄清楚我在这里做错了什么。

4

1 回答 1

0

查询应该返回一个布尔值,在必须部分可以涵盖您的所有搜索。

这是适用于我的示例,我有一个带有 startTimestamp 和 endTimestamp 的记录,我的方法将通过查询找到所有与指定时间范围 + 匹配字段重叠的记录

    @Query("{\"bool\": {\"must\":["
        + "            {\"range\": {\"endTimestamp\": {\"gte\": ?0}}},"
        + "            {\"range\": {\"startTimestamp\": {\"lte\": ?1}}}"
        + "        ], \"should\": ["
        + "             {\"match\": {\"_all\": {\"query\": \"?2\", \"zero_terms_query\": \"all\"}}}"
        + "        ],"
        + "        \"minimum_should_match\" : 1"
        + "    }"
        + "}")
于 2015-07-09T09:53:15.667 回答