欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch基本语法(一)

程序员文章站 2022-03-05 09:53:47
...

一、简介
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"
        }
      }
    }
  }
}
相关标签: 搜索引擎