Аннотация @Query не работает с настраиваемым эластичным поисковым запросом - PullRequest
0 голосов
/ 01 марта 2019

Я использую Elasticsearch с Java Springboot Java.Когда я запускаю свой запрос, используя curl, он работает нормально, но когда я пытаюсь запустить его с Elastic search repository, я получаю исключение.

public interface UserRepository extends ElasticsearchRepository<ActionsElastic, String> {

@Query("{\"query\" : { \"bool\" : { \"must\" : [ { \"term\" : { \"userId\" : ?0 } }, { \"term\" : { \"actionType\" : \"?01\" } } ] } },\n" +
        "\t\"sort\": [ { \"bookmarkedAt\" : { \"order\" : \"?2\" } } ] }")
List<ActionsElastic> findByUserIdAndActionTypeAndActionFilterOrder(Long userId, String actionType, String order, Pageable pageable);

}

Curl -

curl -X POST \
http://localhost:9200/actions/actions/_search \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json' \
-H 'Postman-Token: c06a825f-a9b2-49a8-9955-2d37cd2e3eae' \
-d '{"query" :  
{ "bool" : 
{ "must" : 
[ { "term" : 
{ "userId" : 1122 } }, { "term" : { "actionType" : "like" } } ] } 
},"sort": [ { "bookmarkedAt" : { "order" : "asc" } } ] }'

Curl возвращаетсяданные, но при запуске проекта Spring я получаю

Причина: org.elasticsearch.common.ParsingException: нет [запрос] зарегистрирован для [запрос]

в org.elasticsearch.index.query.6.4.2]
в org.elasticsearch.index.query.AbstractQueryBuilder.rewrite (AbstractQueryBuilder.java:263) ~ [asticsearch-6.4.2.jar: 6.4.2]
в org.elasticsearch.search.builder.SearchSourceBuilder.rewrite (SearchSourceBuilder.java:879) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.search.internal.ShardSearchLocalRequest.rewrite (ShardSearchLocalRequest.java:244) ~ [asticse.2.jar: 6.4.2] в org.elasticsearch.search.internal.[asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.search.SearchService.createContext (SearchService.java:479) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.search.SearchService.createAndPutContext (SearchService.java:461) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.search.SearchService.executeDfsPhase (SearchService.java:226) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.action.search.SearchTransportService $ 5.messageReceived (SearchTransportService.java:332) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.action.search.SearchTransportService$ 5.messageReceived (SearchTransportService.java:329) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived (RequestHandlerRegistry.java:69) ~[asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.transport.TransportService $ 7.doRun (TransportService.java:662) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.common.util.concurrent.ThreadContext $ ContextPreservingAbstractRunnable.doRun (ThreadContext.java:675) ~ [asticsearch-6.4.2.jar: 6.4.2] в org.elasticsearch.common.util.concurrent.AbstractRunnable.run (AbstractRunnable.java): 37) ~ [asticsearch-6.4.2.jar: 6.4.2] ... пропущено 3 общих кадра

Примечание. Я не хочу использовать API JAVA отasticsearch

{
"timestamp": "2019-03-01T13:31:31.537+0000",
"status": 500,
"error": "Internal Server Error",
"message": "all shards failed",
"path": "/content-actions/v1/actions"
}

1 Ответ

0 голосов
/ 01 марта 2019

В аннотации @Query необходимо указать только то, что находится внутри структуры query запроса DSL, т. Е. Нет sort, aggs и т. Д., В основном, так:

@Query("{ \"bool\" : { \"must\" : [ { \"term\" : { \"userId\" : ?0 } }, { \"term\" : { \"actionType\" : \"?01\" } } ] } }")
List<ActionsElastic> findByUserIdAndActionTypeAndActionFilterOrder(Long userId, String actionType, String order, Pageable pageable);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...