ElasticSearch常用操作

1、java-api

复制代码
        SearchRequest request = new SearchRequest(index);
        // 构建一个SearchSourceBuilder
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 添加查询条件
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        if(StringUtils.isNotBlank(basyName)){
            boolQueryBuilder.must(QueryBuilders.matchQuery("content", basyName).analyzer(ANALYZER)); // 替换为你的字段名和查询关键词
        }
        boolQueryBuilder.must(QueryBuilders.termQuery("hdfsType",StatusEnum.TYPE_SHENJIYIJU.getFlag()));
        searchSourceBuilder.query(
                boolQueryBuilder.must(QueryBuilders.termQuery("status",StatusEnum.STATUS_YES.getFlag()))
                        .must(QueryBuilders.termQuery("fileSourceType",StatusEnum.FILE_SOURCE_TYPE_HDFS.getFlag()))
        );
        /*高亮查询*/
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<span style='color:red;'>");
        highlightBuilder.postTags("</span>");
        highlightBuilder.field("content");
        /*需要highlightBuilder,前面创建好*/
        searchSourceBuilder.highlighter(highlightBuilder);
        // 将SearchSourceBuilder设置到SearchRequest中
        request.source(searchSourceBuilder);
        request.scroll(TimeValue.timeValueMinutes(1L));
        SearchResponse search = null;
        try {
            search = client.search(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SearchHits hits = search.getHits();
        //总条数
        long totalLong =hits.getTotalHits().value;

        SearchHit[] hitsArr = hits.getHits();
        List<FileContentInf> contentInfs = new ArrayList<>();
        for (SearchHit documentFields : hitsArr) {
            String json = documentFields.getSourceAsString();
            FileContentInf inf = JSONObject.parseObject(json, FileContentInf.class);
            if(documentFields.getHighlightFields()!=null && documentFields.getHighlightFields().get("content")!=null){
                Text[] contents = documentFields.getHighlightFields().get("content").getFragments();
                if(contents.length>0){
                    inf.setContentInfHtml(contents[0].toString());
                }
            }
            contentInfs.add(inf);
        }
        String scrollId = search.getScrollId();
        while (hitsArr!=null && hitsArr.length>0){
            // 创建一个新的SearchScrollRequest
            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
            scrollRequest.scroll(TimeValue.timeValueMinutes(1L)); // 设置scroll超时

            // 执行scroll查询
            SearchResponse scrollResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
            scrollId = scrollResponse.getScrollId();
            hitsArr = scrollResponse.getHits().getHits();
            for (SearchHit documentFields : hitsArr) {
                String json = documentFields.getSourceAsString();
                FileContentInf inf = JSONObject.parseObject(json, FileContentInf.class);
                if(documentFields.getHighlightFields()!=null && documentFields.getHighlightFields().get("content")!=null){
                    Text[] contents = documentFields.getHighlightFields().get("content").getFragments();
                    if(contents.length>0){
                        inf.setContentInfHtml(contents[0].toString());
                    }
                }
                contentInfs.add(inf);
            }
        }
        // 清除scroll
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        clearScrollRequest.addScrollId(scrollId);
        client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);

// 设置排序规则为降序
                searchSourceBuilder.sort("updateTime.keyword", SortOrder.DESC); // 替换为你要排序的字段名
                // 设置分页参数
                searchSourceBuilder.from((pageResult.getPageNum()-1) * pageResult.getPageSize());
                searchSourceBuilder.size(pageResult.getPageSize());

2、kibana常用命令

按照条件查找

POST /file_content_inf/_search

{

"query": {

"match": {

"fileId": "f8883aed62c27abd6b20013be23db408"

}

}

}

GET /file_content_inf/_search

{

"query": {

"match": {

"content": "文件"

}

}

}

按照条件删除:

POST /file_content_inf/_delete_by_query

{

"query": {

"match": {

"fileId": "f8883aed62c27abd6b20013be23db408"

}

}

}

删除索引:

DELETE /file_content_inf

相关推荐
檐下翻书1731 分钟前
产品开发跨职能流程图在线生成工具
大数据·人工智能·架构·流程图·论文笔记
TTBIGDATA6 小时前
【Knox编译】xmlsectool 依赖缺失问题解析
大数据·hadoop·ambari·hdp·kerberos·knox·bigtop
天远Date Lab6 小时前
Python实战:对接天远数据手机号码归属地API,实现精准用户分群与本地化运营
大数据·开发语言·python
TechubNews7 小时前
2026 年观察名单:基于 a16z「重大构想」,详解稳定币、RWA 及 AI Agent 等 8 大流行趋势
大数据·人工智能·区块链
BlockWay7 小时前
WEEX 成为 LALIGA 西甲联赛香港及台湾地区官方区域合作伙伴
大数据·人工智能·安全
培培说证9 小时前
2026 大专大数据与会计专业核心证书推荐什么
大数据
sensen_kiss10 小时前
INT303 Big Data Analysis 大数据分析 Pt.11 模型选择和词向量(Word Embeddings)
大数据·数据挖掘·数据分析
代码方舟10 小时前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
Dxy123931021610 小时前
Elasticsearch 8.13.4 条件修改 DSL 语句详解
大数据·elasticsearch·搜索引擎
Honeyeagle11 小时前
移动式多合一气体检测仪在有限空间作业中的技术实践与安全价值
大数据