zoukankan      html  css  js  c++  java
  • ElasticSearch的常用方法

      关键词 

      cluster  集群

       shards  索引分片   

      replicas  索引的副本   

      recovery  数据重新分布

      gateway  索引的持久化方式

      Transport 交互方式http或者tcp

      

      ElasticSearch 在建立倒排索引的时候,遵循一个normalization 规则,就是对一些单词进行处理,如单复数 意义相近  大小写的搜索 等等。

      分词器的使用。分词分为三部分:分词(预处理)的特殊字符的转化    分词      标准化 。

      ElasticSearch 分片就是讲索引下面的数据进行分片,数据平分到某个分片上面。 

      ElasticSearch 中文档的版本号更新数据之后,会自动+1  _version,修改的时候还可以加上版本号,进行多线程的判定。 

      分词器:

      standard   :(默认的) 会将词汇转化为小写 并去除停用词标点符号,支持中文采用的方式是单字切片。

      simple :首先通过非字母进行分割,然后转化为小写,会去掉数字类型的字符。

      whitespace :仅仅是去除空格

      language:特定语言的分词器,不支持中文。

      analysis-ik :中文分词器    下面分为两种   ik_max_word   是尽可能多的分词    ik_smart   粗略的分词

      

      常用的方法

      测试分词的分词结果

    GET _analyze?pretty
    {
      "analyzer": "ik_smart",
      "text": "幽鬼极寒幽魂"
    }

      创建索引

    //创建索引
    PUT /indexname/ //索引名称 { "settings":{ "index":{ "number_of_shards":10,          //分片数量 每个最好容量不超过30G "number_of_replicas":1          //分片的副本数量 防止索引出现异常 } } }

    //查询索引的配置
    GET /indexname/_settings

    //查看所有索引的配置
    GET /_all/_settings

      添加数据

    //添加数据    1  为id    若果指定id就用PUT      如果不指定id用自主生成的就用POST
    PUT /indexname/user/1 { "name":"幽鬼", "age":12, "content":"一只行走在夜间的小鬼!" }

      查询数据

    //根据id进行查询
    GET /indexname/user/1

    //返回部分结果的查询
    GET /indexname/user/1?_source=age,name

    //排序查询

    GET /indexname/user/_search
    {
    "query":{
    "match_phrase": {
    "name": "wo shi"
    }
    },
    "sort":[{
    "age":{
    "order":"asc"
    }
    }]
    }

    //查询所有

    GET /indexname/user/_search
    {
    "query":{
    "match_all":{}
    }
    }

    //匹配查询(具有分词的特性)

    GET /indexname/user/_search
    {
    "query":{
    "match":{"name":1}
    }
    }

    //分页

    GET /indexname/user/_search
    {
    "version":true,
    "from": 0,
    "size": 2,
    "query":{
    "terms":{"name":["1","wo"]}
    }
    }

    //查询不进行分词

    GET /indexname/user/_search
    {
    "query":{
    "term": {
    "name": "wo"
    }
    }
    }

    //匹配多个

    GET /indexname/user/_search
    {
    "query":{
    "terms": {
    "name": ["wo","1"]
    }
    }
    }

    //显示版本

    GET /indexname/user/_search
    {
    "version":true,
    "from": 0,
    "size": 2,
    "query":{
    "terms":{"name":["1","wo"]}
    }
    }

    //匹配多个字段

    GET /indexname/user/_search
    {
    "query":{
    "multi_match": {
    "query": "1",
    "fields": ["name","content"]
    }
    }
    }

    //范围查询

    GET /indexname/user/_search
    {
    "query":{
    "range": {
    "birthday": {
    "from":"2018-12-10",
    "to":"2018-12-11"
    }
    }
    }
    }

    //日期或者数字通用的

    GET /indexname/user/_search
    {
    "query":{
    "range": {
    "birthday": {
    "gte": "2018-12-10",
    "lte": "2018-12-11"
    }
    }
    }
    }

    //日期格式上下是否查询

    GET /indexname/user/_search
    {
    "query":{
    "range": {
    "birthday": {
    "gte": "2018-12-11",
    "lte": "2018-12-12",
    "include_lower":true,    //下是否查询
    "include_upper":true    //上是否查询
    }
    }
    }
    }

    //使用通配符进行查询    *任意数量   ?一个字符

    GET /indexname/user/_search
    {
    "query":{
    "wildcard":{"name":"1*"}
    }
    }

    //模糊查询 (相似的查询出来)

    GET /indexname/user/_search
    {
    "query":{
    "fuzzy":{"name":"1"}
    }
    }

    //高亮显示

    GET /indexname/user/_search
    {
    "query":{
    "fuzzy":{"name":"1"}
    },
    "highlight":{
    "fields": {"name":{}}
    }
    }

    //过滤条件的使用(具有缓存的作用)

    GET indexname/user/_search
    {
    "query":{
    "bool": {
    "filter":[
    {"term":{"age":12}}
    ]
    }
    }
    }

    //or  and   not  的查询

    GET indexname/user/_search
    {
    "query":{
    "bool": {
    "should":[                 //相当于or
    {"term":{"age":12}}
    ],
    "must":[            //相当于and
    {"term":{"age":12}}
    ],
    "must_not":[          //相当于not
    {"term":{"age":12}}
    ]
    }
    }
    }

    //聚合查询

    GET indexname/user/_search
    {
    "aggs": {
    "ageSum": {
    "sum": {
    "field": "age"
    }
    }
    }
    }

    //只显示聚合的结果   cardinality(不相同的个数)   

    GET indexname/user/_search
    {
    "size": 0,
    "aggs": {
    "ageSum": {
    "sum": {
    "field": "age"
    }
    }
    }
    }

    //分组

    GET indexname/user/_search
    {
    "size": 0,
    "aggs": {
    "agegroup": {
    "terms": {
    "field": "age"
    }
    }
    }
    }

     //聚合查询的嵌套写法(分组后,求平均年龄)

    GET indexname/user/_search
    {
    "size": 0,
    "aggs": {
    "agegroup": {
    "terms": {
    "field": "age"
    },
    "aggs": {
    "age_of_avg": {
    "avg": {
    "field": "age"
    }
    }
    }
    }
    }
    }

    //上面加上排序的写法

    GET indexname/user/_search
    {
    "size": 0,
    "aggs": {
    "agegroup": {
    "terms": {
    "field": "age",
    "order": {
    "age_of_avg": "desc"
    }
    },
    "aggs": {
    "age_of_avg": {
    "avg": {
    "field": "age"
    }
    }
    }
    }
    }
    }

      更新数据

    //使用put进行数据的覆盖
    PUT /indexname/user/1 { "name":"幽鬼1", "content":"一只行走在夜间的小鬼!" }


    //具体字段的修改,如果没有就进行添加 使用post

    POST /indexname/user/1/_update
    {
    "doc": {
    "name":"幽鬼",
    "age":12
    }
    }

    //还可以加上版本号进行识别  (处理多线程的问题)

    POST /indexname/user/1/_update?version=5
    {
    "doc": {
    "name":"幽鬼",
    "age":121
    }
    }

    //使用外部版本的设置,但是版本只能大于当前的版本,不能用局部_update

    PUT /indexname/user/1?version=10&version_type=external
    {
    "name":"幽鬼1",
    "content":"一只行走在夜间的小鬼!"
    }



      删除  使用delete


      MultiGet   批量获取文本   需要指明_index   _type   _id    三个必须指明

    GET _mget
    {
      "docs":[
        {
          "_index":"indexname",
          "_type":"user",
          "_id":1
        },
        {
            "_index" : ".kibana_1",
            "_type" : "doc",
            "_id" : "config:6.5.0"
        }
        ]
    }

    指明返回指定结果的批量查询

    GET _mget
    {
      "docs":[
        {
          "_index":"indexname",
          "_type":"user",
          "_id" : "1",
         "_source":"age"
        },
        {
            "_index" : ".kibana_1",
            "_type" : "doc",
            "_id" : "config:6.5.0",
            "_source":["config","type"]
        }
        ]
    }

    简化版批量查询

    GET /indexname/user/_mget
    {
      "docs":[
        {
        
          "_id" : "1"
        },
        {
            "_id" : "dWAwMWgBpc13yMzTVGij"
        }
        ]
    }

    更简化版

    GET /indexname/user/_mget
    {
     "ids":["1","dWAwMWgBpc13yMzTVGij"]
    }

      BULK  实现批量操作

    批量添加文档

    //其中 index 如果存在就替换,不存在就新增     create 不能进行替换,如果存在就报错

    POST /indexname/user/_bulk {"index":{"_id":1}} //确定id {"name":1}                     //方法体 {"index":{"_id":2}} {"name":2} {"index":{"_id":3}} {"name":3} {"index":{"_id":4}} {"name":4} {"index":{"_id":5}} {"name":5} {"index":{"_id":6}} {"name":6}

    删除是不需要方法体的

     批量操作如下图:(其中有一个出错,是因为前面删除了id为4的,后面又进行了更新)

     这个的处理量的有限的,它是将文档加入到缓存中进行的,一般建议文档数量在1000-5000之间


    mapping   确定文档类型

    GET /indexname/user/_mapping       //查询mapping

    中文一般需要制定文档类型   

    PUT games
    {
      "mappings": {
        "game":{
          "properties": {
            "name":{"type": "text","analyzer": "ik_max_word"},
            "art":{"type": "text","analyzer": "ik_max_word"}
          }
        }
      }
    }

     

      

      

  • 相关阅读:
    为什么使用GitHub
    java学习笔记
    mysql 内置功能 存储过程 创建有参存储过程
    mysql 字符串类型 char varchar
    前端 HTML 注释
    mysql 内置功能 存储过程 删除存储过程
    前端开发 目录
    mysql 内置功能 存储过程 创建无参存储过程
    mysql 内置功能 存储过程 目录
    mysql 内置功能 存储过程介绍
  • 原文地址:https://www.cnblogs.com/chengyangyang/p/10234512.html
Copyright © 2011-2022 走看看