ElasticSearch基本语法(一)

一、简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
二、语法
(1).创建索引,并且设置索引的主分片数量和副分片数量,其中test是索引名称

PUT test
{
  "settings":
  {
    "index":
    {
      "number_of_shards":3,
      "number_of_replicas":0
    }
  }
}

(2).添加文档,其中test是索引名称(index),user是类型名称(type),1是文档名称(id)

PUT test/user/1
    {
      "name":"csdn",
      "password":123
    }

(3).更新文档,更新有PUT和POST两种方法,PUT方法是重新覆盖,语法和(1)中一样即可,POST是指定特定属性进行更新,一般使用POST方法进行更新,这里是将索引为test,类型为user,id为1的文档的password进行更改

POST test/user/1/_update
{
  "doc": {
    "password":123456
  }
}

(4).对同一个索引使用mget进行批量获取文档数据,这里是将test索引下,user类型的,id为1,2,3三个id进行批量查询

GET test/user/_mget
{
  "ids":[1,2,3]
}

(5).对不同索引使用mget进行批量查询,这里是将索引为test1,test2,test3,类型为user1,user2,user3的文档的部分属性进行查询,_source是指定想要查询的属性,可以省略,当省略_source是是显示此id的全部属性

GET /_mget
{
  
  "docs":
  [
  {
    "_index":"test1",
    "_type":"user1",
    "_id":"1"
  },
  {
    "_index":"test2",
    "_type":"user2",
    "_id":"2",
    "_source":["password","name"]
  },
  {
    "_index":"test3",
    "_type":"user3",
    "_id":"3",
    "_source":["password","name"]
  }
  ]
}

(6)使用bluk进行批量添加文档

POST test/user/_bulk
{"index":{"_id":1}}
{"title":"java","price":55}
{"index":{"_id":2}}
{"title":"php","price":60}
{"index":{"_id":3}}
{"title":"jsp","price":65}
{"index":{"_id":4}}
{"title":"python","price":70}

(7)指定属性值查询,类似于数据库SQL语句的where,其中q是相当于where,name是此文档下的一个属性

GET test/user/_search?q=name:csdn

(8)query查询中的term查询,注意:term类型的查询ElasticSearch是不使用分词器进行分词的

GET test/user/_search
{
  "query": {
    "term": {
      "name":"csdn"
    }
  }
}

(9)query查询中的terms查询,from是从第几个开始进行查询,size是查询多少条

GET test/user/_search
{
  "from": 0, 
  "size": 5, 
  "version": true, 
  "query": {
    "terms": {
      "name":["csdn1","csdn2"]
    }
  }
}

(10)query查询中的match查询,_source是查看想要的属性,如果省略默认是查看此文档中的全部属性(match是使用分词器进行分词的)

GET test/user/_search
{
  "_source": ["name","age"], 
  "query": {
    "match": {
      "name": "csdn"
    }
  }
}

(11)query查询中的multi_match查询,query后面是查询的条件,fields是查询的属性范围

GET test/user/_search
{
  
  "query": {
    "multi_match": {
      "query": "I love ElasticSearch",
      "fields": ["name","address"]
    }
  }
}

(12)query查询中的match_all查询,是查询test索引下的user类型的全部文档,includes是想要显示出来的属性,excludes是不想显示出来的属性,_source可以省略,默认为全部属性都显示出来

GET test/user/_search?explain=true
{
 
  "query": {
    "match_all": {}
  }, 
  "_source": {
    "includes": ["name","address"],
    "excludes": ["age"]
     
  }
}

(13)query查询下的range查询,其中age是查询的文档属性,from是从第几个开始查询,to是查询到第几个,include_lower是包括from后面的5,相当于小于等于号(<=),include_upper是包括to后面的15,相当于大于等于号(>=),连起来就是from<=value<=to,include_lower和include_upper可以省略,默认值都是true

GET test/user/_search
{
  "query": {
    "range": {
      "age": {
        "from": 5,
        "to": 15,
        "include_lower":true,
        "include_upper":true
        
      }
    }
  }
}

(14)query查询下的通配符查询

GET test/user/_search
{
  "query": {
    "wildcard": {
      "name":"c*"
    }
  }
}

(15)query查询下的模糊查询,即想要查询属性name中值value的文档,但是打错成valuo也能查询出来

GET test/user/_search
{
  "query": {
    "fuzzy": {
      "name":"valuo"
    }
  }
}

(16)Filter查询

GET test/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "age":[20,15]
        }
      }
    }
  }
}

(17)复合查询中的must查询,类似于SQL语句的and,此代码是查询test索引,user类型下的name为csdn和age为1的文档,两种条件都必须满足才可以查询到结果

GET test/user/_search
{
  "query": {
    "bool": {
      "must": [
        {"term":{
           "name":"csdn"
          }
        },
        {
          "term":{
            "age":1
          }
        }
      ]
    }
  }
}

(18)复合查询下是should查询,类似于SQL语句的or,此代码是查询test索引,user类型下的name为csdn和age为1的文档,两种条件满足其中一个就才可以查询到结果

GET test/user/_search
{
  "query": {
    "bool": {
      "should": [
        {"term": {
          "name":"csdn"
          }
        },
        {
          "term":{
            "age":1
          }
        }
       
      ]
    }
  }
}

(19)Filter查询下的range查询(范围查询),此代码是查询test索引,user类型下的age属性范围是10到20的文档,gte相当于>=,lte相当于<=,连起来就是gte<=value<=lte

GET test/user/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }
  }
}

(20)聚合查询之sum查询,此代码是查询age属性的总和,其中MyAgeSum是自己起的聚合的名字,field是聚合的属性

GET test/user/_search
{
  "aggs": {
    "MyAgeSum": {
      "sum": {
        "field": "age"
      }
    }
  }
}

(21)聚合查询之max查询,此代码是查询age属性的最大值,其中MyAgeMax是自己起的聚合的名字,field是聚合的属性

GET test/user/_search
{
  "aggs": {
    "MyAgemaxMax": {
      "max": {
        "field": "age"
      }
    }
  }
}

(22)聚合查询之min查询,此代码是查询age属性的最小值,其中MyAgeMin是自己起的聚合的名字,field是聚合的属性

GET test/user/_search
{
  "aggs": {
    "MyAgeMin": {
      "min": {
        "field": "age"
      }
    }
  }
}

(23)聚合查询之avg查询,此代码是查询age属性的平均值,其中MyAgeAvg是自己起的聚合的名字,field是聚合的属性

GET test/user/_search
{
  "aggs":{
    "MyAgeAvg":{
      "avg": {
        "field": "age"
      }
    }
  }
}

(24)聚合查询之terms查询,也就是分组查询

GET test/user/_search
{
  "aggs": {
    "MyAgeGroup": {
      "terms": {
        "field": "age"
      }
    }
  }
}

(25)使用scroll技术实现大数据搜索,这里使用mtach_all查询全部数据为例,查询类型可以自己定。其中_search?scroll=1m内的scroll=1m是之在1分钟内查询出来,也就是时间限制,sort:["_doc"]是取消分值计算,使用文档形式,从而加快查询速率,size是每次查询多少条

GET test/user/_search?scroll=1m
{
  "query": {
    "match_all": {}
  },
  "sort": ["_doc"],
  "size": 3
}

GET _search/scroll
{
  "scroll":"1m",
  "scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAayFnZXbklBYlJUVEEya1puZHRKNDNBRkEAAAAAAAAGsBZ2V25JQWJSVFRBMmtabmR0SjQzQUZBAAAAAAAABrMWdlduSUFiUlRUQTJrWm5kdEo0M0FGQQAAAAAAAAaxFnZXbklBYlJUVEEya1puZHRKNDNBRkEAAAAAAAAGtBZ2V25JQWJSVFRBMmtabmR0SjQzQUZB"
}

(26)自定义索引下的mapping,此代码是设置properties下的id属性类型为text,context属性类型为test,并且analyzer是设置分词器类型,这里是使用ik分词器

PUT testmapping
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas":0 
  },
  "mappings": {
    "testmapping":{
      "properties": {
        "id":{
          "type": "text"
        },
        "context":{
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值