【问题标题】:How to use StringQuery in Elasticsearch Spring Data如何在 Elasticsearch Spring Data 中使用 StringQuery
【发布时间】:2015-10-27 05:44:08
【问题描述】:

我想公开允许客户端执行任何查询的灵活 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"}}

classNameDynamicEntity 的一个属性。

我收到以下错误:

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]),您可以尝试使用query={"term":{"className":"invoice"}} 代替(即使用term 代替query)吗?
  • 成功了!非常感谢。您想将此作为问题的答案吗?

标签: elasticsearch spring-data-elasticsearch


【解决方案1】:

根据您发布的错误,您的示例查询无效(即No query registered for [query])。

您应该改用它(即使用term 而不是query):

query={"term":{"className":"invoice"}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2019-06-23
    • 1970-01-01
    • 2014-08-19
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多