2015-07-06 4 views
0

У меня есть этот интерфейс, определенный весной для запроса Elascticsearch. Я добавил аннотацию @Query, чтобы выполнить некоторую фильтрацию.@Query игнорируется в ElasticSearch Spring java framework

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 полностью игнорируется. Как вы можете видеть, я пробовал фамилию hardcoding, и это не влияет на результат запроса. Если я удалю фигурные скобки в строке запроса, я не получу никаких ошибок. Запрос все еще работает, фильтрация игнорируется и возвращает все совпадения.

Может кто-то, пожалуйста, помогите мне выяснить, что я делаю неправильно здесь.

ответ

0

Запрос должен вернуть bool, что в обязательном разделе может охватывать все ваши запросы.

Вот мой пример, который работает для меня, у меня есть записи с 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" 
     + " }" 
     + "}")