如何在 Elasticsearch Spring 数据中使用 StringQuery
How to use StringQuery in Elasticsearch Spring Data
我想公开允许客户端执行任何查询的灵活 REST 服务。类似于 elasticsearch API:
http://localhost:9200/blog/post/_search?q=user:dilbert
我找到了 ElasticsearchTemplate 及其方法 queryForList(StringQuery query, Class clazz)。看来很符合我的目的。
@RequestMapping(value = "/search", method = RequestMethod.GET)
public List<DynamicEntity> findAllBySearch(@RequestParam("query") String query) {
return elasticsearchTemplate.queryForList(new StringQuery(query), DynamicEntity.class);
}
但我不知道如何构造查询。我找不到这方面的文档。我试图猜测它没有成功。例如:
http://localhost:8080/dynamic/search?query={"query":{"className":"invoice"}}
className 是 DynamicEntity 的属性。
我收到以下错误:
org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [dfs], all shards failed; shardFailures {[feu_3VGkTgKKUziW19mXUQ][dynamic][3]: SearchParseException[[dynamic][3]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][4]: SearchParseException[[dynamic][4]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][1]: SearchParseException[[dynamic][1]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][2]: SearchParseException[[dynamic][2]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][0]: SearchParseException[[dynamic][0]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }
我使用的方法正确吗?如何构造有效查询?我不想使用任何构建器 类 因为查询应该在 JavaScript.
中的客户端上构建
根据您发布的错误,您的示例查询无效(即 No query registered for [query]
)。
您应该改用它(即使用 term
而不是 query
):
query={"term":{"className":"invoice"}}
我想公开允许客户端执行任何查询的灵活 REST 服务。类似于 elasticsearch API:
http://localhost:9200/blog/post/_search?q=user:dilbert
我找到了 ElasticsearchTemplate 及其方法 queryForList(StringQuery query, Class clazz)。看来很符合我的目的。
@RequestMapping(value = "/search", method = RequestMethod.GET)
public List<DynamicEntity> findAllBySearch(@RequestParam("query") String query) {
return elasticsearchTemplate.queryForList(new StringQuery(query), DynamicEntity.class);
}
但我不知道如何构造查询。我找不到这方面的文档。我试图猜测它没有成功。例如:
http://localhost:8080/dynamic/search?query={"query":{"className":"invoice"}}
className 是 DynamicEntity 的属性。
我收到以下错误:
org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to execute phase [dfs], all shards failed; shardFailures {[feu_3VGkTgKKUziW19mXUQ][dynamic][3]: SearchParseException[[dynamic][3]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][4]: SearchParseException[[dynamic][4]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][1]: SearchParseException[[dynamic][1]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][2]: SearchParseException[[dynamic][2]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }{[feu_3VGkTgKKUziW19mXUQ][dynamic][0]: SearchParseException[[dynamic][0]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query_binary":"eyJxdWVyeSI6eyJjbGFzc05hbWUiOiJpbnZvaWNlIn19"}]]]; nested: QueryParsingException[[dynamic] No query registered for [query]]; }
我使用的方法正确吗?如何构造有效查询?我不想使用任何构建器 类 因为查询应该在 JavaScript.
中的客户端上构建根据您发布的错误,您的示例查询无效(即 No query registered for [query]
)。
您应该改用它(即使用 term
而不是 query
):
query={"term":{"className":"invoice"}}