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

}

}

}

}

}

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。