ElasticsearchRepository - 修改@Query值
ElasticsearchRepository - Modify the @Query value
目前我正在使用 ElasticsearchRepository 和 Springboot 数据。我可以用一个简单的查询注解写一个简单的方法:
@Query("{\"bool\":{\"must\":[{\"match\":{\"_resource\":\"?0\"}}]}}")
List<Activity> findByResource(String resource);
但是,Activity 索引可能有不同的多个字段(logstash 中的每一行都不同)。所以,我可能需要添加多个匹配子句。我正在测试添加第二个参数,该参数将包含其余参数(如果有),如下所示:
@Query("{\"bool\":{\"must\":[{\"match\":{\"_resource\":\"?0\"}}?1]}}")
List<Activity> findByResource(String resource, String additionalClauses);
第二个参数可能如下所示:
String additional = ",{\"match\":{\"_method\":\"GET\"}}
但是,在使用服务调用端点时出现此异常:
Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]]; nested: ElasticsearchException[Elasticsearch exception [type=json_parse_exception, reason=Unexpected character ('\' (code 92)): was expecting double-quote to start field name\n at [Source: (ByteArrayInputStream); line: 1, column: 62]]];
我明白我试图做的并不是使用 @Query 注释的理想方式(我认为它甚至不被允许做我正在尝试的事情),所以:
- 是否有不同的方法来完成此操作?
- @Query 是我唯一的选择吗?那我怎么办呢?
干杯。
无法以这种方式将其他查询组件作为参数传递。如果一个参数是一个字符串,它将在被插入到 @Query
注释的值之前被引用和转义。这个创建的字符串然后用于构建 StringQuery
.
您需要创建 Query
变体之一(有关详细信息,请参阅 https://docs.spring.io/spring-data/elasticsearch/docs/4.3.0/reference/html/#elasticsearch.operations.queries),可能是 StringQuery
并将其传递给 ElasticsearchOperations
。
目前我正在使用 ElasticsearchRepository 和 Springboot 数据。我可以用一个简单的查询注解写一个简单的方法:
@Query("{\"bool\":{\"must\":[{\"match\":{\"_resource\":\"?0\"}}]}}")
List<Activity> findByResource(String resource);
但是,Activity 索引可能有不同的多个字段(logstash 中的每一行都不同)。所以,我可能需要添加多个匹配子句。我正在测试添加第二个参数,该参数将包含其余参数(如果有),如下所示:
@Query("{\"bool\":{\"must\":[{\"match\":{\"_resource\":\"?0\"}}?1]}}")
List<Activity> findByResource(String resource, String additionalClauses);
第二个参数可能如下所示:
String additional = ",{\"match\":{\"_method\":\"GET\"}}
但是,在使用服务调用端点时出现此异常:
Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]]; nested: ElasticsearchException[Elasticsearch exception [type=json_parse_exception, reason=Unexpected character ('\' (code 92)): was expecting double-quote to start field name\n at [Source: (ByteArrayInputStream); line: 1, column: 62]]];
我明白我试图做的并不是使用 @Query 注释的理想方式(我认为它甚至不被允许做我正在尝试的事情),所以:
- 是否有不同的方法来完成此操作?
- @Query 是我唯一的选择吗?那我怎么办呢?
干杯。
无法以这种方式将其他查询组件作为参数传递。如果一个参数是一个字符串,它将在被插入到 @Query
注释的值之前被引用和转义。这个创建的字符串然后用于构建 StringQuery
.
您需要创建 Query
变体之一(有关详细信息,请参阅 https://docs.spring.io/spring-data/elasticsearch/docs/4.3.0/reference/html/#elasticsearch.operations.queries),可能是 StringQuery
并将其传递给 ElasticsearchOperations
。