分享一下自己整理的ES相关命令
一:简介
ES(Elasticsearch)基于Lucene,可以理解为是一个全文搜索引擎。Elasticsearch是用Java开发的,Apache开放源码。ES的实时搜索,稳定,可靠,快速,扩展性很好等特性,使其能扩展到大量服务器以处理PB级别的数据。因此在全文搜索领域应用极广。ES主要功能:搜索引擎和数据分析引擎,全文检索和结构化检索,近乎实时的处理海量数据
二:基本结构(跟数据库比对)
ES集群可以包含多个索引(indices)(数据库)
每一个索引可以包含多个类型(types)(表)
每一个类型包含多个文档(documents)(行)
然后每个文档包含多个字段(Fields)(列)
三:常用数据类型
(1)字符串类型: text, keyword
(2)数字类型:long, integer, short, byte, double, float, half_float, scaled_float
(3)日期:date、date_nanos
(4)布尔型:boolean
四:列出索引命令
GET _cat/indices?v
五:创建索引
PUT /lxtest4
{
"mappings": {
"stu": {
"properties": {
"name": {"type": "text"},
"age": {"type": "long"},
"birth": {"type": "date"},
"mess": {"type": "keyword"}
}
}
}
}
六:索引中插入数据
PUT /lxtest4/stu/1
{
"name" : "张三",
"age" : "18",
}
POST /lxtest4/stu
{
"name":"lisi",
"age":20
}
七:批量插入数据
POST /lxtest3/stu/_bulk
{"index":{}}
{"name":"zhangba","age":"15"}
{"index":{}}
{"name":"wangwu","age":"12"}
{"index":{}}
{"name":"zhaoliu","age":"13"}
{"index":{}}
{"name":"chenqi","age":"14"}
八:查询数据
GET /lxtest4/stu/_search
九:条件查询
1、指定id查询
GET lxtest4/stu/5
2、模糊匹配
GET /lxtest4/stu/_search
{
"query": {
"match_phrase": {
"name":"张三"
}
}
}
3、分词匹配
GET /lxtest4/stu/_search
{
"query": {
"match": {
"name":"张三"
}
}
}
4、指定多个字段查询
GET /lxtest4/stu/_search
{
"query": {
"multi_match": {
"query": "小",
"fields": ["name","mess"]
}
}
}
5、精准查询
GET lxtest4/_search
{
"query": {
"term": {
"name.keyword": {
value:"李七"
}
}
}
}
6、查询多个值
GET /lxtest1/_search
{
"query": {
"ids": {
"type": "sales",
"values":["1","2"]
}
}
}
GET full_asset_v3/doc/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"sub_category": [1,2,4,5,7,9,10,11,12]
}
}
]
}
}
}
7、查看字段类型
GET /lxtest/stu/_mapping
8、组合查询(且)
GET /lxtest/stu/_search
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"name": "测试"
}
},
{
"match_phrase": {
"mess": "123"
}
}
]
}
}
}
9、组合查询(或)
GET /lxtest/stu/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"name": "测试"
}
},
{
"match_phrase": {
"mess": "123"
}
}
]
}
}
}
10、嵌套查询
GET auction_extract_v3/_search
{
"query": {
"nested": {
"path": "obligors",
"query": {
"match_phrase": {
"obligors.name.keyword": "中国工商银行股份有限公司"
}
}
}
}
}
十、分页查询
size 显示应该返回的结果数量,默认是 10
from 显示应该跳过的初始结果数量,默认是 0
如果每页展示 5 条结果,可以用下面方式请求得到 1 到 3 页的结果
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
十一、查询结果排序
GET /lxtest4/_search
{
"sort": [
{
"age.keyword": {
"order": "desc"
}
}
]
}
十二、聚合查询
指标聚合(metric):max min avg sum:
size:0 表示聚合查询的结果不需要返回中间的文档内容
max_price 我们自定义的分组名字,最好是见名知意的
GET /lxtest1/sales/_search
{
"size": 0,
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
}
}
十三、 分组(桶聚合(bucketing)
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"group_color": {
"terms": {
"field": "color"
}
}
}
}
十四、查询有多少分组
{
"size": 0,
"aggs": {
"perDeviceAggregation": {
"terms": {
"field": "orgId.keyword"
}
},
"count":{
"cardinality": {
"field": "orgId.keyword"
}
}
}
}
十五、统计数据数量
GET /lxtest1/sales/_count
{
"query": {
"match": {
"price": "2000"
}
}
}
十六、更新数据
1、全局更新 插入数据时有即更新,没有则新增
PUT lxtest4/stu/5
{
"name":"lixiaoqi",
"age":"22",
"birth":"1998-17-03 12:16:01",
"mess":"大学生"
}
2、局部更新 指定id更新(不加id时新增)
POST lxtest4/stu/5/_update
{
"doc":{
"age":"20",
"desc":"新加的字段测试"
}
}
十七、删除
DELETE lxtest/stu/100
POST /lxtest3/_delete_by_query {"query": {}}
DELETE lxtest
十八、根据文档字段长度查询
GET full_asset_v3/doc/_search
{
"query": {
"bool": {
"filter": {
"regexp": {
"obligors.number": {
"value": ".{18,}"
}
}
}
}
}
十九、es中使用简单sql(语句中的表、字段 对应 es中的索引、文档)
POST _xpack/sql?format=txt&pretty
{
"query": "select count(distinct(vehicleNumber.keyword)) from yca_vehicle_illegal_information where name = '北京鸿通世纪货物运输有限公司'"
}
二十、查询某个字段存在的数据
GET full_asset_v3/doc/_search
{
"query": {
"bool": {
"must": [
{
"exists": {
"field": "obligors.birthday"
}
}
]
}
}
}
二十一、对多字段进行分组
GET court_notice_asset/doc/_search
{
"size": 0,
"aggs": {
"fenzu": {
"terms": {
"script": "doc['court.keyword'].values +'#split#'+ doc['gmtTrial'].values+'#split#'+ doc['caseNumber.keyword'].values",
"size": 100
}
}
}
}
二十二、查询某个字段的多只值(相当于sql中的in)
GET full_asset_v3/doc/_search
{
"query": {
"bool": {
"filter": {
"terms": {
"sub_category": [1,2,4,5,7,9,10,11,12]
}
}
}
}
}