Elasticsearch-基本命令

2023-11-12

创建索引

put http://localhost:9200/index01
{
	"mappings": {
		"type1": {
			"properties": {
				"field1": {
					"type": "string",
					"analyzer": "ik_max_word"
				},
				"field2": {
					  "type": "string"
				}
			}
		}
	}
}

添加数据

post http://localhost:9200/index01/_bulk?pretty
1.{"index":{"_index":"index01", "_type":"type1", "_id":"2"} }
2.{"field1":"程序设计也是设计,研发新菜也是研发","field2":"五道口"}
3.(_bulk格式:最后一行需空出)

删除数据

Client client = elasticsearchTemplate.getClient();
            DeleteResponse response = client.prepareDelete().setIndex("dmac").setType("md").setId(params.get("instanceId").toString())
                    .setRefresh(true).execute().actionGet();

简单查询

post http://localhost:9200/index01/_search
{"query":{
        "match":{
            "field1":"程序"
        }
    }
}

复杂查询1

{
  "query": {
    "bool": {
      "must": [
        {"term": {"a": "1"}},
        {"term":{"b": "2"}}
        {
          "bool": {
            "should": [
                {"term": {"c": "1"}},
              {"term": {"d": "2"}}
            ]
          }
        }
      ]
    }
  },
  "sort": {
    "time": {
      "order": "desc"
    }
  },
  "size": 100
}

复杂查询2

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
                {"term": {"a": "1"}},
                {"term":{"b": "2"}},
                {"term": {"c": "1"}}
            ]
          }
        },
        {
          "bool": {
            "must": [
                {"term": {"a": "1"}},
                {"term":{"b": "2"}},
              {"term": {"d": "2"}}
            ]
          }
        }
      ]
    }
  },
  "sort": {
    "time": {
      "order": "desc"
    }
  },
  "size": 100
}

获得所有index

 - rest方式:
	curl 'localhost:9200/_cat/indices?v'
	
 - JAVA方式
		GetIndexResponse response = client.admin().indices().prepareGetIndex().execute().actionGet(); 					 System.out.println(response.getIndices().length);
	 String[] indices = response.getIndices();
	  for(String indice : indices){ 
	  System.out.println(indice); 
	  }

获得所有mapping-type

 - rest方式:
 	curl -XGET 'http://localhost:9200/_mapping?pretty=true'
 - 非格式化:
 	curl -s -XGET 'http://localhost:9200/_mapping'
 	
 - JAVA方式:
 	GetMappingsResponse res = null; 
	try { 
		res = client.admin().indices().getMappings(new GetMappingsRequest().indices(indice)).get();
	 } catch (InterruptedException e) { 
		 e.printStackTrace(); 
	 } catch (ExecutionException e) {
	 	 e.printStackTrace(); 
	 }
	 ImmutableOpenMap<String, MappingMetaData> mapping = res.mappings().get(indice); 
	 for (ObjectObjectCursor<String, MappingMetaData> c : mapping) 
	 { 
	 	 System.out.println("type = "+c.key); 
	 	 System.out.println("columns = "+c.value.source());
	  }

根据某个字段精确查找

- rest方式:
 	curl -XGET 'http://127.0.0.1:9200/index/type/_search?pretty&q=name:Tom'
  • api的bool查询
public Page<?> listInstance(Map<String, Object> params) {
        int pageCurrent = params.get("pageCurrent") == null ? 1 : (Integer) params.get("pageCurrent");
        int pageSize = params.get("pageSize") == null ? 10 : (Integer) params.get("pageSize");
        Pageable pageable = new PageRequest(pageCurrent - 1, pageSize);
        //获取属于用户的系统视图的元数据id
        List<String> sysViewsInstanceId = new ArrayList<>();
        if(params.get("instanceIds")!=null){
            String[] viewIds = params.get("instanceIds").toString().split(",");
            sysViewsInstanceId = java.util.Arrays.asList(viewIds);
        }else{
            sysViewsInstanceId = this.getSysViewInstanceId(params);
        }
        //构件查询条件
        BoolQueryBuilder builder = QueryBuilders.boolQuery();
        BoolQueryBuilder subQuery = QueryBuilders.boolQuery();
        for (String viewsInstanceId : sysViewsInstanceId) {
            subQuery.should(QueryBuilders.queryStringQuery(viewsInstanceId).queryName("namespace"));
        }
        builder.must(subQuery);
        if(params.get("classifierId")!=null){
            BoolQueryBuilder subQuery2 = QueryBuilders.boolQuery();
            subQuery2.must(QueryBuilders.queryStringQuery(params.get("classifierId").toString()).queryName("classifierId"));
            builder.must(subQuery2);
        }
        if(params.get("searchValue")!=null){
            BoolQueryBuilder subQuery3 = QueryBuilders.boolQuery();
            subQuery3.should(QueryBuilders.wildcardQuery("code", "*" + params.get("searchValue").toString().toUpperCase() + "*"));
            subQuery3.should(QueryBuilders.wildcardQuery("name", "*" + params.get("searchValue").toString().toUpperCase() + "*"));
            builder.must(subQuery3);
        }

        //构建排序条件
        FieldSortBuilder codeSortBuilder = SortBuilders.fieldSort("code").order(SortOrder.ASC);
        FieldSortBuilder idSortBuilder = SortBuilders.fieldSort("id").order(SortOrder.ASC);
        // 分页、查询、排序
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withPageable(pageable)
                .withQuery(builder)
                .withSort(codeSortBuilder)
                .withSort(idSortBuilder)
                .build();
        org.springframework.data.domain.Page<MetadataModel> search = metadataRepository.search(searchQuery);

        List<MetadataModel> content = search.getContent();
        Page<MetadataModel> page = new Page<>();
        page.setTotal(search.getTotalElements());
        page.addAll(content);
        int total = (int) page.getTotal();
        List<Map<String, Object>> data2 = new ArrayList<>(total);
        Map<String, Object> temp;
        for (int i = 0; i < page.getResult().size(); i++) {
            MetadataModel metadata = page.getResult().get(i);
            temp = new HashMap<>();
            temp.put("CLASSIFIER_ID", metadata.getClassifierId());
            temp.put("CLASSIFIER_NAME", metadata.getClassifierName());
            temp.put("INSTANCE_CODE", metadata.getCode());
            temp.put("INSTANCE_ID", metadata.getId());
            temp.put("INSTANCE_NAME", metadata.getName());
            temp.put("NAMESPACE", metadata.getPath());
            data2.add(temp);
        }
        Page<Map<String, Object>> page2 = new Page<>();
        page2.setTotal(total);
        page2.addAll(data2);
        return page2;
    }
    
其中逻辑的DSL表达式如下:
{
    "query":{
        "bool":{
            "must":[
                {
                    "bool":{
                        "should":[
                            {
                                "query_string":{
                                    "query":"3223076994024b718f70ef507705ff03",
                                    "_name":"namespace"
                                }
                            },
                            {
                                "query_string":{
                                    "query":"3223076994024b718f70ef507705ff03",
                                    "_name":"namespace"
                                }
                            }
                        ]
                    }
                },
                {
                    "bool":{
                        "must":{
                            "query_string":{
                                "query":"Table",
                                "_name":"classifierId"
                            }
                        }
                    }
                },
                {
                    "bool":{
                        "should":[
                            {
                                "wildcard":{
                                    "code":"*TB*"
                                }
                            },
                            {
                                "wildcard":{
                                    "name":"*TB*"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

api的分组查询

public Map<String, String> listInstanceType(Map<String, Object> params) {
        Client client = elasticsearchTemplate.getClient();
        //获取属于用户的系统视图的元数据id
        List<String> sysViewsInstanceId = new ArrayList<>();
        if(params.get("instanceIds")!=null){
            String[] viewIds = params.get("instanceIds").toString().split(",");
            sysViewsInstanceId = java.util.Arrays.asList(viewIds);
        }else{
            sysViewsInstanceId = this.getSysViewInstanceId(params);
        }
        BoolQueryBuilder builder = QueryBuilders.boolQuery();
        BoolQueryBuilder subQuery = QueryBuilders.boolQuery();
        for (String viewsInstanceId : sysViewsInstanceId) {
            subQuery.should(QueryBuilders.queryStringQuery(viewsInstanceId).queryName("namespace"));
        }
        builder.must(subQuery);
        FieldSortBuilder codeSortBuilder = SortBuilders.fieldSort("code").order(SortOrder.ASC);
        //子查询
        AggregationBuilder group= AggregationBuilders.terms("agg-class")
                .field("classifierId");    //.order(Terms.Order.count(false)).size(0)

        SearchRequestBuilder searchRequestBuilder = client
                .prepareSearch("dmac").setTypes("md")
                .setQuery(builder)
                .addAggregation(group)
                ;
        SearchResponse searchResponse = searchRequestBuilder.execute()
                .actionGet();
        Terms terms = searchResponse.getAggregations().get("agg-class");
        Collection<Terms.Bucket> buckets = terms.getBuckets();
        Map<String, String> dataMap = new HashMap<String, String>();
        for (Terms.Bucket bucket : buckets) {
            String key = bucket.getKey()+"";
            dataMap.put(key.toUpperCase(), bucket.getDocCount() + "");
        }
        return dataMap;
    }

bool查询

GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      }, 
      "filter": {
        "term": {
          "salary": 6666
        }
      
      }
    }
  }
}

# select * from job where salary=6666 or salary=7777
# 查询所有数据,筛选出工资等于6666或者7777的数据
GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      }, 
      "filter": {
        "terms": {
          "salary": [6666,7777]
        }
      
      }
    }
  }
}
# 查询salary等于6666或者title等于python、salary不等于7777、salary不等于8888

GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "salary": {
            "value": 6666
          }
        }},
        {"term": {
          "title": {
            "value": "python"
          }
        }}
      ],
      "must_not": [
        {"term": {
          "salary": {
            "value": 7777
          }
        }},
        {"term": {
          "salary": {
            "value": 8888
          }
        }}
      ]
    }
  }
}

# salary等于6666或者title等于python salary不等于9999 title不等于redis

GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "salary": {
            "value": 6666
          }
        }},
        {"term": {
          "title": {
            "value": "python"
          }
        }}
      ],
      "must_not": [
        {"term": {
          "salary": {
            "value": 9999
          }
        }},
        {
          "term": {
            "title": {
              "value": "redis"
            }
          }
        }
      ]
    }
  }
}
# 查询title为python或者(title为搜索并且salary等于6666)的数据
GET 51jobs/job/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "title": {
            "value": "python"
          }
        }},
        {
          "bool": {
            "must": [
              {"term": {
                "title": {
                  "value": "搜索"
                }
              }},
              {
                "term": {
                  "salary": {
                    "value": 6666
                  }
                }
              }
            ]
          }
          
        }
      ]
    }
  }
}


# 添加空值测试数据
PUT nulldb/test/_bulk
{"index":{"_id":1}}
{"tags":["IT","python"]}
{"index":{"_id":2}}
{"tags":["java","python"]}
{"index":{"_id":3}}
{"tags":null}
{"index":{"_id":4}}
{"tags":["IT","php"]}
{"index":{"_id":5}}
{"tags":[null,"python"]}


# 处理null空值
# 过滤空值
# exists 处理值不为空或者值不为null的数据
GET nulldb/test/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "tags"
        }
      }
    }
  }
}

# 筛选出tags值为空或者没有tags属性的数据
GET nulldb/test/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists":{
            "field":"tags"
          }
        }
      ]
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch-基本命令 的相关文章

随机推荐

  • 华为交换机配置MSTP

    文章目录 1 拓扑图 2 任务描述 3 SW1配置 4 SW2配置 5 SW3配置 6 SW4配置 1 拓扑图 2 任务描述 在交换机SW1 SW2 SW3 SW4上配置MSTP防止二层环路 具体要求如下 VLAN10数据流默认经过SW3转
  • 程序媛菜鸡面经(八 - offer篇)

    投简历 简历是要多投的 但是有时候投多了简历也会有问题 头条 没有面试机会 在看过简历后HR发邮件告知我 从简历上能看出你是一位很优秀的人 但看不出你在前端 技术方面的竞争力 当时投的是旧版简历 于是我回邮问简历有误能否重申 至今未有回音
  • 子网掩码的作用

    IP地址由网络和主机两部分标识组成 IP地址由 网络标识 网络地址 和 主机标识 主机地址 两部分组成 在局域网内相互间通信的网络必须具有相同网络地址 也叫相同的网段 在同一个网段内每个设备的主机地址都不相同 在IPV4中 IP地址由32位
  • Vue中query与params两种传参的区别

    query语法 this router push path 地址 query id 123 这是传递参数 this route query id 这是接受参数 params语法 this router push name 地址 params
  • linux系统哪个好用

    linux系统哪个好用 1 Ubuntu服务器 Ubuntu是众所周知的最佳LinuxServerDistro 它能为您提供出色的用户体验 如果你是Linux世界的新手 选择Ubuntu作为你的服务器发行版将是最好的 使用此服务器 您可以做
  • Mac系统如何在圣诞节让电脑屏幕下雪?

    对于苹果 Mac 电脑上的 终端 应用 可能大家在平时用得不多 所以对它应该都会比较陌生 其实这个终端应用是用于让用户可以直接输入一些系统指令 让它执行相应的操作 比如简单的显示当前目录中的文件 显示日期与时间 删除文件等操作都是可以的 今
  • Android项目Gradle: Download gradle-6.5-bin.zip一直卡住解决方法

    1 首先停止gradle的下载 通过迅雷或浏览器将gradle下载下来 下载地址为 https services gradle org distributions gradle 6 5 bin zip 其他版本的gradle同理 2 打开C
  • 二级MS Office高级应用

    1 在长度为n的有序线性表中进行二分查找 最坏的情况下需要比较的次数是 O log2n 以2为底n对数 解析 当有序线性表为顺序存储时才可以用二分查找 可以证明的是对于长度为n的有序线性表 最坏的情况下 二分查找只需要比较O log2n 次
  • 数据仓库开发之路之一--准备工作

    在数据仓库的开发过程中 需要熟悉大量的概念以及相关工具的使用 还需要了解宏观上的各种开发流程 串联起来完成最终的数据仓库项目的开发 本篇介绍一些准备工作 包括涉及到的工具介绍 以及开发过程的描述 记录学习研究的印记 并和大家讨论研究存在的相
  • conda upgrade --all惹的祸,该怎么解决?

    本想要安装scikit surprise库 由于环境问题 就更新一下 谁知道差点酿成大祸 anaconda不灵了 无论什么语句都报错 jupyter notebook 不能用 navigator也打不开 万念俱灰了 导致我想要重装anaco
  • atx860和java_捷安特XTC800和ATX860有什么区别

    展开全部 区别比较大 简单说 ATX 8xx就是e69da5e887aa62616964757a686964616f31333431353237ATX 6xx的 局部升级 轮组由26寸换为27 5寸 车架外观改进 变速套件等级略微提高 仅此
  • mmclassification 训练自定义数据

    1 mmclassification 安装 如果环境已安装mmclassification 请跳过该步骤 mmclassification框架安装与调试验证请参考博客 mmclassification安装与调试 Coding的叶子的博客 C
  • STM32基于IIC协议的温湿度(AHT20)采集

    STM32基于IIC协议的温湿度 AHT20 采集 文章目录 STM32基于IIC协议的温湿度 AHT20 采集 1 IIC总线协议 1 1 什么是IIC协议 1 2 IIC协议的物理层和协议层 1 2 1 物理层 1 2 2 协议层 1
  • orm模型的查询方法集合

    目录 3 4 1 基本查询 3 4 2过滤查询 3 4 2 2 模糊查询 3 4 2 3 空查询 3 4 2 4 范围查询 3 4 2 5 比较查询 3 4 2 6 日期查询 3 4 3 1 F对象 3 4 3 2 Q对象 values 返
  • Aborted (core dumped) Assertion `Engine.getNbBindings() == 4' failed.

    记录一次特别粗心的错误 错误代码位置 assert的作用是现计算表达式 expression 如果其值为假 即为0 那么它先向stderr打印一条出错信息 然后通过调用 abort 来终止程序运行 需要 inputname 3 output
  • 垂直广告是什么意思_网上常看到带货这个词,那么带货到底是什么意思?又要怎么通过平台带货呢?...

    网上常看到带货这个词 那么带货到底是什么意思 又要怎么通过平台带货呢 直播带货就是通过短视频平台 吸引消费者来购买自己所售卖的产品 可以投放广告或是与达人合作进行带货 短视频 品牌营销优势 新一代广告宠儿 5G时代即将来临 人们越来越习惯且
  • HTML5----FormData实例用法

    ajax 异步上传文件 1 前言 在网页与后台的交互中 用的最多的网络交互方式之一就是ajax ajax 是免刷新页面就能从进行post与get方式的提交表单和获取服务端数据 但是在原先的ajax中 是不能携带文件上传的 但是由于h5里面的
  • Mysql数据库手册

    数据库基本概念 1 数据库 就是数据的仓库 由表 关系 操作对象组成 2 表 由行和列组成 数据都存放在表中 由于mysql是关系数据库 所以表又被称为关系 3 字段 就是属性 4 记录 一行数据就是一条记录 也是一条实体 需要设置主键 5
  • 基于惯性动作捕捉技术进行快速动画制作教程

    长久以来动画制作流程上有着诸多不可回避的问题 尤其在于角色动画的制作周期和动画效果方面 一般来说 每一秒钟的角色动画都需要动画师手动关键帧制作耗费8小时才能完成 也就是说 一个动画师每个月只能制作出22秒动画 动作捕捉技术为动画制作者带来福
  • Elasticsearch-基本命令

    基本命令 创建索引 添加数据 删除数据 简单查询 复杂查询1 复杂查询2 获得所有index 获得所有mapping type 根据某个字段精确查找 api的分组查询 bool查询 创建索引 put http localhost 9200