我有一个JAVA代码,可以从ES中获取一些记录。 JAVA代码如下:
public Map<String, Object> getRiskDetailsFromEventIds(final String eventId) {
try {
String elasticBaseUrl = elasticsearchConfig.getEsUrl();
String esIndexName = elasticsearchConfig.getHitsIndex();
String endpointUrl = elasticBaseUrl + "/" + esIndexName + "/_search";
String queryTemplate = IOUtils.toString(ESRepositary.class.getClassLoader().getResourceAsStream(
"querytemplates/hits_search_event_es_query_template.json"), Charset.defaultCharset());
String query = String.format(queryTemplate, eventId);
return getResultsFromElastic(endpointUrl, query);
} catch (IOException ex) {
throw new UncheckedIOException(ex);
}
}
我的 hit_search_event_es_query_template.json 看起来像这样
{
"_source": [
"hitNumber","eventId","hitScore","severityLevel","priority","hitType.typeCode","targetOwner","hitType.search","recommendedAction","referralId"
],
"query": {
"bool": {
"must": [
{
"terms": {
"eventId": ["%s"]
}
}
]
}
},
"size" : "50"
}
现在,这需要一个字符串。我的 eventId 是:“A、B、C、D”
我需要传递给查询模板的字符串应该是:“A”,“B”,“C”,“D” 有人可以帮助我以这种方式分解我的字符串,或者有人可以帮助我修改我的 ES 查询以利用我所拥有的内容。
最佳答案
获取 eventId 列表,我可以执行以下操作:
String eventId = eventIds.stream().map(event -> "\""+event+"\"").collect(Collectors.joining(","));
其中 eventIds 是列表
此外,我还更改了查询,如下所示:
{
"_source": [
"hitNumber","eventId","hitScore","severityLevel","priority","hitType.typeCode","targetOwner","hitType.search","recommendedAction","referralId"
],
"query": {
"bool": {
"must": [
{
"terms": {
"eventId": [%s]
}
}
]
}
},
"size" : "50"
}
这为我提供了我需要的查询。
关于string - 我正在使用 Java 通过在代码中动态生成查询来从 Elasticsearch 中获取一些记录。查询需要一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57725898/