" />
文章

Elasticsearch 常用操作备忘

Elasticsearch 常用操作备忘

 public Map<String, Object> getByEsId(String idKey, String idVal, String sourceIndex) {
        SearchRequest esRequest = new SearchRequest(sourceIndex + "*");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(
                QueryBuilders.boolQuery().must(QueryBuilders.termQuery(idKey, idVal))
        );
        sourceBuilder.size(1);
        sourceBuilder.from(0);
        esRequest.source(sourceBuilder);
        SearchResponse esResponse = esSearch.searchByRequest(esRequest);
        SearchHits searchHits = esResponse.getHits();
        SearchHit[] hits = searchHits.getHits();
        logger.info("jw getByEsId over hits:{}", hits.length);
        if (hits.length > 0) {
            SearchHit hit = hits[0];
            return hit.getSourceAsMap();
        } else {
            logger.info("getByEsId event can not find");
            return null;
        }
    }


  public void updateById(String id, String idVal, String sourceIndex, Map<String, Object> params) {
        QueryBuilder query = QueryBuilders.termQuery(id, idVal);
        StringBuilder sb = new StringBuilder();
        Map<String, Object> scriptParams = new HashMap<>();

        for (Map.Entry<String, Object> entry : params.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            boolean keyIsNotNull = key != null && !key.isEmpty() && !"null".equals(key);
            boolean valueIsNotNull = value != null && !"null".equals(value);
            if (keyIsNotNull && valueIsNotNull) {
                sb.append("ctx._source.").append(key).append("=params['").append(key).append("']; ");
                scriptParams.put(key, value);
            }
        }
        // 创建更新脚本
        Script script = new Script(
                ScriptType.INLINE,
                "painless",
                sb.toString(),
                scriptParams
        );
        esOperation.updateByQuery(sourceIndex + "*", query, script);
    }
License:  CC BY 4.0