ES相关命令

分享一下自己整理的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

ES相关命令_第1张图片

五:创建索引

   

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

ES相关命令_第2张图片

 九:条件查询

        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]
        }
      }
    }
  }
}

你可能感兴趣的:(elasticsearch,大数据)