ES进阶语法

在练习语法前,先导入官网中的数据,来进行各种的语法测试

导入数据

samples
在这里插入图片描述

Elasticsearch语法学习

官方文档上有详细的操作过程,就根据官方文档来进行操作

  1. 两种语法的编写形式(倾向于第一种,也叫作QueryDSL)在这里插入图片描述
  2. 分页查询
GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "account_number": "asc",
      "age": "desc"
    }
  ],
  "from": 0,
  "size": 10
}

  1. 查看部分字段
GET /bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "account_number": "asc",
      "age": "desc"
    }
  ],
  "from": 0,
  "size": 10,
  "_source": ["balance","firstname"]
}
  1. match匹配,可以精确也可以模糊,按照max_score评分进行排序(倒排索引)
GET /bank/_search
{
  "query": {
    "match": {
      "address": "Mill"
    }
  },
  "sort": [
    {
      "account_number": "asc",
      "age": "desc"
    }
  ],
  "from": 0,
  "size": 10,
  "_source": ["balance","firstname"]
}
  1. match_phrase短语匹配,查询时需要查的单元是完整的短语,不对短语进行分词,如果使用.keyword的话,那么就要求这个属性中只由这一个短语构成,否则就搜索不到
GET /bank/_search
{
  "query": {
    "match_phrase": {
      "address": "Mill Lane"
    }
  },
  "sort": [
    {
      "account_number": "asc",
      "age": "desc"
    }
  ],
  "from": 0,
  "size": 10
}

  1. 多字段匹配,给多个字段进行query
GET /bank/_search
{
  "query": {
    "multi_match": {
      "query": "Mill",
      "fields": ["address","city"]
    }
  }
}
  
  1. bool复合查询,有must(必须满足),must_not(必须不能满足),should(可满足,可不满足)
GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ]
    }
  }
}
  1. filter结果过滤,前面的这些检索都可以使用filter来做到,不同的是,filter不会计算相关性得分,这些操作都可以组合在bool中
GET /bank/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 30
          }
        }
      }
    }
  }
}
  
  1. term查询,对于一些属性的精确查找使用term(match可以完成精确和非精确)
GET /bank/_search
{
  "query": {
    "term": {
      "age":"28"
    }
  }
}
  
  
  1. aggreation聚合
# aggreation  address 包含mill的人的年龄分布和平均年龄
GET /bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  },
  "aggs": {
    "allAge": {
      "terms": {
        "field": "age",
        "size": 10
      }
    },
    "aveAge":{
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0
}

在aggreation中有很多字段,后边的size等于0是为了不出现检索数据,只出现聚合数据。聚合不仅仅和水平,也可以嵌套。

  1. 在ES6后不推荐使用Type,而是直接索引下就是数据(为了减少冲突,增加效率),映射就是每个字段的类型,比如keyword,address,long等,不用指定,ES会默认进行猜测。在这里插入图片描述当然也可以在创建索引的时候给一些字段指定每个字段的映射规则
# 创建索引并制定映射关系
PUT /my-index
{
  "mappings": {
    "properties": {
      "age":{"type": "integer"},
      "email":{"type": "keyword"},
      "name":{"type": "text"}
    }
  }
}


添加新的字段,可以通过index为true来设置不被索引(相当于是冗余字段)

# 给已经创建的所有添加映射
PUT /my-index/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}

可以通过GET /my-index/_mapping来查看所有的映射

  1. 修改映射(没有update)只能进行数据迁移(创建一个新的索引,将以前的数据迁移过去)
PUT /new-index
{
  "mappings": {
     "properties" : {
        "account_number" : {
          "type" : "long"
        },
        "address" : {
          "type" : "keyword"
        },
        "age" : {
          "type" : "integer"
        },
        "balance" : {
          "type" : "long"
        },
        "city" : {
          "type" : "keyword"
        },
        "email" : {
          "type" : "keyword"
        },
        "employer" : {
          "type" : "text"
        },
        "firstname" : {
          "type" : "text"
        },
        "gender" : {
          "type" : "keyword"
        },
        "lastname" : {
          "type" : "text"
        },
        "state" : {
          "type" : "keyword"
        }
      }
  }
}

数据迁移,将老index,type为account的移动到new-index下

POST _reindex
{
  "source": {
    "index": "bank",
    "type": "account"
  },
  "dest": {
    "index": "new-index"
  }
}

在这里插入图片描述
在这里插入图片描述

  1. 分词器,默认使用标准分词器,可以使用此语法查看分词效果在这里插入图片描述默认的分词器不能满足我们要的效果,因为对中文支持不好,因此需要安装分词器插件
    在linux下安装分词器,进入ES的plugins下
    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
    unzip elasticsearch-analysis-ik-7.4.2.zip
    在这里插入图片描述
    为所有用户添加所有权限
    在这里插入图片描述
    进入bin目录下查看插件是否安装成功,然后docker restart elasticsearch
    在这里插入图片描述
    测试ik分词器
    使用ik的智能分词
    在这里插入图片描述
    使用最大单次组合
    在这里插入图片描述
    也可以自定义词库完成分词,需要在分词器里面进行配置。
    我使用nginx服务器完成自定义分词的管理,在nginx的html/es目录下创fenci.txt,并将要规定的词写到文件中
    在这里插入图片描述

配置自定义字典的地址
在这里插入图片描述在这里插入图片描述
重启ES服务(docker restart elasticsearch)
在Kibana中进行测试,可以看到分词成功
在这里插入图片描述
在这里插入图片描述
ES就说到这,官网上有更全面的案例和语法规则!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值