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"
}
}
}
}
}
上一篇: 网络爬虫