Elasticsearch学习

elasticsearch简单使用总结

1、ELK的安装的准备
1.1 ELK的下载地址
ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D

logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D

可视化界面elasticsearch-head.https://github.com/mobz/elasticsearch-head

kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D

ik分词器 https://github.com/medcl/elasticsearch-analysis-ik

1.1 elk安装 参考

https://blog.csdn.net/mgdj25/article/details/105740191

这边说下基本要做的

  1. kibana的国际化设置 yml中设置成zh-CN

  2. es下的yml文件添加跨域

    http.cors.enabled: true
    http.cors.allow-origin: "*" 
    
    

    这边特别提醒一下分词的粒度设置,比如一个分词只是将一个词的单体拆分,“李逵哈哈”,可能只是将李逵两个都分开了,并没有分成“李逵”这个词,那就要自己去写字典了

    在ik分词下的config目录下新增一个 “cyx.dic”

    把自己的dic 添加到配置中 IKAnalyzer.cfg.xml中

    增加一个(里面很多用法 都有注释)

    <!-- 用户可以在这扩展自己的用户字典-->  
    <entry key="ext_dict">cyx.dic</entry>
    

    1.2 ES核心概念

    集群,节点,索引,类型,文档,分片,映射是什么?
    
DBElasticsearch
数据库(database)索引(indices)
表(tables)types
行(rows)documents
字段(columns)fields

如果要使用中文,建议使用ik分词器!

IK提供了两个分词算法: ik_ smartik_ max_ word ,其中ik_ smart为最少切分, ik_ max_ _word为最细粒度划分!一会我们测试!

分词 粗粒度
GET _analyze
{
  "analyzer":"ik_smart",
  "text":"我是社会主义接班人"
}
分词 细粒度
GET _analyze
{
  "analyzer":"ik_max_word",
  "text":"我是社会主义接班人"
}

命令模式的使用

methodurl地址描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id通过文档id查询文档
POSTlocalhost:9200/索引名称/类型名称/_search查询所有的数据

在这里插入图片描述

#创建索引
PUT /索引名/类型名/文档

PUT /lisen/type1/1

#获取索引
GET /lisen/type1/1

#获取索引信息
GET /test2

获取健康值

GET _cat/health

获取所有信息

GET _cat/indices?v
修改
PUT /lisen/type1/1
{
  "name":"王五",
  "age":"30"
}

GET /lisen/type1/1

创建test2


GET /test2

PUT /test2/_doc/1
{
  "name":"张三",
  "age":"18",
  "birthdya":"2020-08-11"
}

GET /test2/_doc/1

PUT /test2/_doc/2
{
  "name":"李四",
  "age":"20",
  "birthdya":"2021-09-11"
}

POST /test2/_doc/_search

POST /test2/_doc/1/_update
{
  "doc":{
    "name":"法外狂徒张三"
  }
}

POST /test2/_doc/1
{
  "doc":{
    "name":"张三三"
  }
}

GET /test2/_doc/1

DELETE /test2/_doc/1

PUT /test2/_doc/1
{
  "name" : "张阿三",
  "age" : "20",
  "birthdya" : "2021-09-11"
}

PUT /test2/_doc/3
{
  "name" : "李阿四",
  "age" : "20",
  "birthdya" : "2021-09-11"
}

PUT /test2/_doc/4
{
  "name" : "王阿五",
  "age" : "20",
  "birthdya" : "2021-09-11"
}

POST /test2/_doc/_search

GET /test2/_doc/_search?q=name:1

使用keyword不分词
POST /test3/user
{
  "mappings":{
    "properties":{
      "name":{
        "type":"keyword"
      }
    }
  }
}

GET /test3
DELETE /test3

GET _cat/health
GET _cat/indices?v

PUT /test3
{
  "mappings": {
      "properties":{
        "name":{
          "type":"keyword"
        },
        "address":{
          "type":"keyword"
        },
        "age":{
          "type":"integer"
        }
    }
  }
}


PUT /test3/_doc/1
{
  "name":"张三",
  "address":"天津",
  "age":19
}

PUT /test3/_doc/2
{
  "name":"李三",
  "address":"天津",
  "age":19
}

PUT /test3/_doc/3
{
  "name":"王三",
  "address":"天津",
  "age":19
}

PUT /test3/_doc/3
{
  "name":"三分",
  "address":"天津",
  "age":19
}

GET /test3/_doc/_search?q=name:三分 
GET /test3/_doc/_search?q=name:三分 and address:天津
包含
GET test2/_doc/_search
{
  "query":{
    "match":{
      "name":"阿三"
    }
  }
}


GET test2/_doc/_search
{
  "query":{
    "match":{
      "name":"阿三"
    }
  },
  "_source":["name","age"]
}

不包含

GET test2/_doc/_search
{
  "query":{
    "match":{
      "name":"阿三"
    }
  },
  "_source":{"excludes":["name","age"]}
}


排序

# 修改age的值,用于排序
POST test2/_doc/2/_update
{
  "doc":{
    "age":21
  }
}

POST test2/_doc/3/_update
{
  "doc":{
    "age":22
  }
}

POST test2/_doc/4/_update
{
  "doc":{
    "age":23
  }
}


GET test2/_doc/_search
{
  "query":{
    "match":{
      "name":"阿"
    }
  },
  "sort":{
    "age":{
      "order":"desc"
    }
  }
}

分页

GET /test2/_doc/_search
{
  "sort":{
    "age":{
      "order":"desc"
    }
  },
  "from":0,
  "size":2
}

多条件 must(and),所有的条件都要符合

GET /test2/_doc/_search
{
  "query":{
    "bool":{
      "must":[
        {
          "match":{
            "name":"阿"
          }
        },
        {
          "match":{
            "age":23
          }
        }
        ]
    }
  }
}

或 should (or) 跟数据库一样

GET /test2/_doc/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "match":{
            "name":"阿"
          }
        },
        {
          "match":{
            "age":22
          }
        }
        ]
    }
  }
}

排除

GET /test2/_doc/_search
{
  "query":{
    "bool":{
      "must_not":[
        {
          "match":{
            "name":"阿"
          }  
        }
        ]
    }
  }
}

区间

GET /test2/_doc/_search
{
  "query":{
    "bool":{
      "must":[
        {
          "match":{
            "name":"阿"
          }
        }
        ],
        "filter":{
          "range":{
            "age":{
              "gte":10,
              "lte":30
            }
          }
        }
    }
  }
}

通配符

GET /test2/_doc/_search
{
  "query":{
    "wildcard":{
      "name":{
        "value":"张*"
      }
    }
  } 
}

多id查询

GET /test2/_doc/_search
{
  "query":{
    "ids":{
      "values":["1","2","3"]
    }
  }
}

GET /test2
测试keyword是否分词
PUT lisendb
{
  "mappings":{
    "properties":{
      "name":{
        "type": "text"
      },
      "content":{
        "type":"keyword"
      }
    }
  }
}

PUT lisendb/_doc/1
{
  "name":"尼尔",
  "content":"呜哈哈212"
}

PUT lisendb/_doc/2
{
  "name":"李毅",
  "content":"哈哈少儿"
}


GET _analyze
{
  "analyzer":"standard",
  "text":"士大夫撒"
}

GET _analyze
{
  "analyzer":"keyword",
  "text":"士大夫撒"
}

GET lisendb/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "term":{
            "name":"李"
          }
        },
        {
          "term":{
            "name":"尔"
          }
        }
        ]
    }
  }
}

高亮

GET lisendb/_search
{
  "query":{
    "bool":{
      "should": [
        {
          "term":{
            "name":"李"
          }
        },
        {
          "term":{
            "name":"尼"
          }
        }
      ]
    }
  },
  "highlight": {
    "pre_tags": "<a class='haha'>", #高亮样式
    "post_tags": "</a>", 
    "fields": {
      "name":{}
    }
  }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于学习Elasticsearch,我可以给你一些指导。Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于快速、实时地存储、搜索和分析大量数据。下面是一些学习Elasticsearch的步骤: 1. 了解基本概念:开始学习Elasticsearch之前,你需要了解一些基本的概念,比如索引(index)、类型(type)、文档(document)、字段(field)等。这将帮助你更好地理解Elasticsearch的工作原理。 2. 安装和配置:根据你的操作系统,你可以从Elasticsearch官方网站下载并安装合适的版本。安装完成后,你需要进行适当的配置,如设置集群名称、分配内存等。 3. 学习REST API:Elasticsearch提供了丰富的REST API,用于与其进行交互。了解如何使用这些API来索引、搜索和删除数据是学习Elasticsearch的重要一步。 4. 索引和搜索数据:学习如何创建索引、添加文档以及执行搜索操作是使用Elasticsearch的关键。掌握查询语法、过滤器、聚合操作等功能可以帮助你更有效地使用Elasticsearch。 5. 数据建模和分析:学习如何设计合适的数据模型和映射,以及如何使用Elasticsearch进行数据分析和可视化是提高你的技能的重要一步。 6. 扩展和优化:学习如何在生产环境中扩展和优化Elasticsearch集群是非常重要的。了解如何分片、复制、调优性能等将帮助你更好地管理和维护你的数据。 7. 学习资源:除了官方文档,还有很多优秀的学习资源可供参考,如书籍、教程和在线课程等。利用这些资源可以更系统地学习和掌握Elasticsearch。 希望这些步骤能对你学习Elasticsearch有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值