string - 我正在使用 Java 通过在代码中动态生成查询来从 Elasticsearch 中获取一些记录。查询需要一个字符串

标签 string elasticsearch java

我有一个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/

相关文章:

java - 在eclipse中添加对java的项目引用

java - 支柱 2 <s :select> filling other fields within a form

java - 为什么 jhat 的 -baseline 选项不起作用?

java - 从字符串中提取最接近的句子

r - 向字符串添加单引号

Java基于两个分隔符对字符串进行排序

elasticsearch - Elasticsearch中的索引计数

elasticsearch - 设置ELK集群

Javascript 替换功能不适用于正则表达式

elasticsearch - Elastic/Kibana:在查询搜索中支持复数