ELK介绍

ELK最初是三个开源组件的缩写(ElasticSearch/LogStash/Kibana),后来发展为以ElasticSearch构建的实时全文搜索技术栈ElasticStack。

ElasticSearch(以下简称es)是基于Lucene开发的,基于倒排索引构建。倒排索引的意思就是非基于key搜索value,而是基于value提取出对应的key。因此会是多对多的情况。

es的一些基础概念和用法介绍

  • index document的索引
  • type (es7开始,废弃⚠️)
  • mapping 这里类似于创建document中每个属性的类型和约束,可以优化搜索效率
  • document es中存储的最小单位,类比于关系型数据库中的每一条记录
  • field 每条记录的属性
  • 分词器 可扩展插件,可以对输入的字符串进行分词处理,一段字符串分词的可能性不同查询出来的记录数也是不同的
  • alias 别名,给索引设置别名

es基于restful api,PUT/POST 用于修改和提交数据,GET用于查询数据,DELETE用于删除数据

// 语法基于elastic v8
es 内置暴露的handler操作端口(_type v8中移除)
_doc 文档操作端口
_mapping 映射关系操作端口
_search 查询端口
_ingest 系统内置的一些meta信息和处理器,可以在这里创建pipeline

1.增
创建索引 
PUT /index

创建名为add-timestamp的pipeline
参考资料:https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline-processor.html
PUT /_ingest/pipeline/add-timestamp
{
  "description": "Adds a field to a document with the time of ingestion",
  "processors": [
    {
      "set": {
        "field": "ingest_timestamp",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

添加文档,id可指定或者不填则随机生成,如果已经有了该id则更新,同时可以指定使用的pipeline 
PUT/POST /index/_doc/id?pipeline=add-timestamp
{
   "title":"标题",
   "content":"内容"
}

2.删
删除索引 
DELETE /index

删除索引中的指定文档
DELETE /index/_doc/1,2,3,..,ids

3.查
3.1根据id精准查询
GET /index/id

3.2根据信息查询
设置超时时间 属性 timeout

3.3查询链接中携带参数,属性名:属性值
GET /index/_search?q=attr:value

3.4分页查询并排序,注意排序的属性可能不支持排序,这里可能存在分页性能问题
🔍 参考资料1
https://blog.csdn.net/ChengHuanHuaning/article/details/117696054
from 起始条数
size 每页数目
sort 排序规则
GET /index/_search?from=0&&size=2&&sort=obj.attr:desc

3.5使用DSL查询
🔍参考资料2 https://blog.csdn.net/shen198623/article/details/123095622
PUT /index/_search?
{
  "query":{
    "查询动作":"xxx"
  },
  # 排序规则
  "sort": {
    “attr.keyword”: {
       "order":"desc"
    }
  },
  "from":0,
  "size":1,
  # 指定返回的属性名
  "_source": [
    "attr1",
    "attr2"
  ],
  # 高亮配置
  "highlight":{
    "fields" : {
      "content": {
        "pre_tags":[
          "<h1>"],
        "post_tags":[
          "</h1>"]
      }
    }
  }
}

查询动作:
1. match_all 查询所有数据
2. match 单字段匹配,会根据分词器拆分词
3. term 单字段匹配,后面的条件不进行拆分
4. multi_match 多字段匹配
{
  "query":"查询的内容",
  "fields":["属性名1","属性名2"]
}
5.match_phrase 短语分词匹配,分词后的每个词都要匹配上

筛选过滤filter/bool,详情参考参考资料2

测试分词器

POST http://127.0.0.1:9200/_analyze?pretty
{
  "analyzer":"ik_smart",
  "text":"奥黛丽赫本天下第一美"
}

集群模式配置

#Node节点1:

# 允许跨域,生产上不推荐开启
http.cors.enabled: true
http.cors.allow-origin: "*"

#节点1的配置信息:
#集群名称,保证唯一
cluster.name: es

#节点名称,必须不一样
node.name: node1
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样,api通讯端口
http.port: 9201
#集群间通信端口号,在同一机器下必须不一样,gossip通讯端口
transport.tcp.port: 9301

#集群节点,通过这个设置可以配置es集群
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

Q.E.D.


每一个平凡的日常都是连续的奇迹