我在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注释。正如您所看到的,我尝试使用硬编码的姓氏,它对查询的结果没有影响。如果我在查询字符串中删除大括号,我不会收到任何错误。查询仍然有效,忽略过滤,并返回所有匹配。
有人可以帮我弄清楚我在这里做错了什么。
答案 0 :(得分:0)
查询应返回bool,必填部分中的https://jsfiddle.net/2avm4a6n/20/可以涵盖您的所有搜索。
这是我的示例,对我来说,我有一个带有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"
+ " }"
+ "}")