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.