【问题标题】:elasticsearch spring data @query annotationelasticsearch spring data @query 注解
【发布时间】:2016-04-11 21:24:05
【问题描述】:

我正在尝试在 elasticsearch spring 数据中使用 @query 注释进行复杂查询,但是当我尝试以下简单查询时出现错误

@Query(value="{'bool':{'must':{'field':{'name':?0}}}}")
Segment findByName(String name);

堆栈跟踪

[ERROR] com.innvo.aop.logging.LoggingAspect - Exception in 
com.innvo.web.rest.RouteResource.elastic() with cause = null and
exception {}
org.elasticsearch.action.search.SearchPhaseExecutionException: Failed to
execute phase [dfs], all shards failed; shardFailures {[6JK9sflAQK6fSCuDr-
AgkQ][segment][0]: SearchParseException[[segment][0]: from[0],size[10]:  
Parse Failure [Failed to parse source         
[{"from":0,"size":10,"query_binary":
"eydib29sJzp7J211c3QnOlt7J3Rlcm0nOnsnaWQnOic1MjAwJ319XX19"}]]];
nested: QueryParsingException[[segment] Failed to parse]; nested: 
JsonParseException[Unexpected character (''' (code 39)): was expecting 
either valid name character (for unquoted name) or double-quote (for 
quoted) to start field name
at [Source: [B@4cc4c177; line: 1, column: 3]]; }{[6JK9sflAQK6fSCuDr-
AgkQ][segment][1]: SearchParseException[[segment][1]: from[0],size[10]: 
Parse Failure [Failed to parse source 
[{"from":0,"size":10,"query_binary":
"eydib29sJzp7J211c3QnOlt7J3Rlcm0nOnsnaWQnOic1MjAwJ319XX19"}]]]; nested:
QueryParsingException[[segment] Failed to parse];
nested:JsonParseException[Unexpected character (''' (code 39)): was 
expecting either valid name character (for unquoted name) or double-quote 
(for quoted) to start field name
at [Source: [B@31702d66; line: 1, column: 3]]; }{[6JK9sflAQK6fSCuDr- 
AgkQ][segment][2]: SearchParseException[[segment][2]: from[0],size[10]:
Parse Failure [Failed to parse source    
[{"from":0,"size":10,"query_binary":
"eydib29sJzp7J211c3QnOlt7J3Rlcm0nOnsnaWQnOic1MjAwJ319XX19"}]]]; nested: 
QueryParsingException[[segment] Failed to parse]; nested:
JsonParseException[Unexpected character (''' (code 39)): was expecting
either valid name character (for unquoted name) or double-quote (for
quoted) to start field name

【问题讨论】:

    标签: elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    @Query 注释中,您只需使用转义双引号而不是单引号:

    @Query(value="{\"bool\":{\"must\":{\"term\":{\"name\":\"?0\"}}}}")
    Segment findByName(String name);
    

    还请注意,我已将 field 替换为 term(或 match 也是可能的),因为 field 不是有效查询。

    【讨论】:

    • 你确定这是完全相同的错误,即关于意外字符 39(单引号)的相同消息。
    • org.elasticsearch.action.search.SearchPhaseExecutionException:执行阶段[dfs]失败,所有分片失败; shardFailures {[tnDFcLa9TgWCCuRgrok6VA][segment][0]: SearchParseException[[segment][0]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size": 10,"query_binary":"eyJib29sIjp7Im11c3QiOnsiZmllbGQiOnsibmFtZSI6dGVzdH19fX0="}]]];嵌套:QueryParsingException[[segment] 没有为 [field]] 注册查询; }{[tnDFcLa9TgWCCuRgrok6VA][segment][1]: SearchParseException[[segment][1]: from[0],size[10]: Parse Failure [Failed to parse source[{"from":0,"size": 10,"query_binary":"
    • 这是一个不同的问题。您的查询无效。您需要将field 替换为term(或match)。请参阅我的更新答案。
    • org.elasticsearch.action.search.SearchPhaseExecutionException:执行阶段[dfs]失败,所有分片失败; shardFailures {[qRBWvX1CTLSN43Xv6ChybQ][segment][0]: SearchParseException[[segment][0]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size": 10,"query_binary":"eyJib29sIjp7Im11c3QiOnsidGVybSI6eyJuYW1lIjp0ZXN0fX19fQ=="}]]];嵌套:QueryParsingException[[segment] 解析失败];嵌套:JsonParseException [无法识别的令牌“测试”:期待“空”、“真”、“假”或 NaN
    • 快到了。我们缺少参数?0 周围的双引号,请重试
    猜你喜欢
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2018-04-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多