目前我正在使用 ElasticsearchRepository 和 Springboot 資料。我可以用一個簡單的 Query 注釋撰寫一個簡單的方法:
@Query("{\"bool\":{\"must\":[{\"match\":{\"_resource\":\"?0\"}}]}}")
List<Activity> findByResource(String resource);
但是,活動索引可能具有不同的多個欄位(在 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 que 是我唯一的選擇嗎?那我怎么辦呢?
干杯。
uj5u.com熱心網友回復:
以這種方式將附加查詢組件作為引數傳遞是不可能的。如果引數是字串,它將在插入@Query注釋的值之前被參考和轉義。這個創建的字串然后用于構建一個StringQuery.
您將需要創建其中一個Query變體(有關詳細資訊,請參閱https://docs.spring.io/spring-data/elasticsearch/docs/4.3.0/reference/html/#elasticsearch.operations.queries),可能是一個StringQuery和將其傳遞給ElasticsearchOperations.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360712.html
