我的 java 服務中有以下代碼可以正常作業。
Query searchQuery = new StringQuery(
"{\"bool\":{\"must\":[{\"match\":{\"id\":\"" id "\"}}]}}");
SearchHits<Instance> instanceSearchHits = elasticsearchOperations.search(searchQuery, Instance.class, IndexCoordinates.of("test"));
log.info("hits :: " instanceSearchHits.getSearchHits().size());
現在,我想將此查詢保存為彈性模板,只需將引數和搜索模板從 java 服務傳遞到彈性以執行查詢。
在 Elastic 中添加的搜索模板
PUT _scripts/search-template-1
{
"script": {
"lang": "mustache",
"source": {
"query": {
"bool": {
"must": [
{
"term": {
"id": "{{id}}"
}
}
]
}
}
},
"params": {
"id": "id to search"
}
}
}
呼叫此模板
GET test/_search/template
{
"id": "search-template-1",
"params": {
"id": "f52c2c62-e921-4410-847f-25ea0f3eeb40"
}
}
但不幸的是,無法找到相同的 API 參考來從 JAVA 呼叫此搜索模板(spring-data-elasticsearch)
uj5u.com熱心網友回復:
正如val所提到的,這可用于從 java 呼叫搜索模板查詢
SearchTemplateRequest request = new SearchTemplateRequest();
request.setRequest(new SearchRequest("posts"));
request.setScriptType(ScriptType.STORED);
request.setScript("title_search");
Map<String, Object> params = new HashMap<>();
params.put("field", "title");
params.put("value", "elasticsearch");
params.put("size", 5);
request.setScriptParams(params);
SearchTemplateResponse response = client.searchTemplate(request, RequestOptions.DEFAULT);
SearchResponse searchResponse = response.getResponse();
SearchHits searchHits = searchResponse.getHits();
log.info("hits :: " searchHits.getMaxScore());
searchHits.forEach(searchHit -> {
log.info("this is the response, " searchHit.getSourceAsString());
});
uj5u.com熱心網友回復:
目前這還不可能。Spring Data Elasticsearch 中有一個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/478694.html
