ElasticSearch笔记
ElasticSearch
- 基于lucene的搜索服务器(搜索引擎)
- 分布式多用户
- 基于Restful
- java开发
- ELK日志分析系统
- 是一个nosql
关系数据搜索缺点
- 无法打分
- 无法分布式
- 无法解析搜索请求
- 效率低
- 分词
安装
config/elasticsearch.yml文件配置,解决跨域问题
- http.cors.enabled: true
- http.cors.allow-origin: "*"
- elasticsearch-head:可视化插件
- kibana:可以官网下载
启动
elasticsearch
- ./bin/elasticsearch -d #后端启动
elasticsearch-head
- npm install
- npm run start
搭建集群
配置master
cluster.name: jim node.name: master node.master: true network.host: 127.0.0.1 # 端口保持默认
配置slave
cluster.name: jim-slave node.name: slave1 network.host: 127.0.0.1 http.port: 8200 # 避免和master端口冲突 discovery.zen.ping.unicast.hosts: ["127.0.0.1"] # 查找master
概念
- 集群:多个节点的集合
- 节点:集群中的每一个es应用
索引:含有相同属性的文档集合【sql中数据库】
- 分片:一份数据分几份,默认5,只能在创建的时候指定,不可以后期修改
- 副本:创建几份数据,默认1
类型:索引可以定义一个或多个类型,文档必须属于一个类型【sql中表】
- text
- keyword
- integer
- date
- 文档:可以被索引的基本数据单位【sql中数据】
- 倒排索引(inverted index)
- TF-IDF
索引的CRUD操作
- 创建
PUT lagou { "setting":{ "index":{ "number_of_shards":5, # 切片数 "number_of_replicas":1 # 副本数,可修改 } } } # 获取设置 GET lagou/_settings GET _all/_settings GET _settings GET lagou1,lagou2/_settings #更新配置 PUT lagou/_settings { "number_of_replicas":2 } #获取索引 GET lagou GET _all #添加数据 POST lagou/job/1 { "key":"value", ... } #获取数据 GET lagou/job/1 #指定id存储 GET lagou/job/ #自动生成一个uuid当作id GET lagou/job/1?_source=key1,key2 #修改数据 PUT lagou/job/1 { "key":"value", ... } POST lagou/job/1/_update { "doc":{ "key":"value", ... } } # 脚本形式修改数据 POST lagou/job/1/_update { "script":{ "lang":"painless", "inline":"ctx._source.key = value", # 这里的value就可以使用params.key "params":{ "key":value } } } #删除数据 DELETE lagou/job/1 DELETE lagou
批量操作
- 批量获取
GET lagou/job/_mget { "docs":{ 条件 } } GET lagou/job/1/_mget { "ids":[id1,id2...] }
- bulk批量操作
POST _bulk {"index":{"_index":"lagou","_type":"job","_id":"1"}} {"title":"批量操作喽","city":"北京"} {"delete":{"_index":"lagou","_type":"job","_id":"1"}} {"create":{"_index":"lagou","_type":"job","_id":"1"}} {"update":{"_index":"lagou","_type":"job","_id":"1"}}
映射(即:创建表字段)
PUT lagou { "mappings":{ "type_name":{ "dynamic":false, # 索引固定 "properties":{ "name":{ "store":true,(是否保存) "type":属性,(即字段类型) "index":"analyzer" #使用分词 "analyzer":"ik_max_word"(分析器,即分词类型) }, "age":{ "store":true, "type":属性(如果是keywork则不会被分词) }, "date":{ "store":true, "type":date, "format":"yy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } ... } } } }
查询
基本查询
- match查询
# 通过id查询 GET lagou/job/id # 条件查询 GET lagou/job/_search # 可以使用post和get两种方式,建议使用post { "stored_fields":[字段1,字段2...], # 指定返回的字段 "query":{ "match":{ # "match_all":{}全部查询 match_phrase:{}完全匹配查询 "字段":内容 ... } }, "from":1 "size":1 "sort":[ {"字段":{ "order":"desc" } } ] }
- 聚合查询
GET lagou/_search { "类型":{ "分组名":{ "term":{ # stat min都可以使用 "字段":内容 ... } } } }
- term查询(全量查询,必须完全匹配)
GET lagou/job/_search { "query":{ "term":{ "字段":内容 ... } } }
- terms查询(有一个匹配就返回,并且不是全量查询)
GET lagou/job/_search { "query":{ "terms":{ "字段":[内容1,...] ... } } }
- 多字段查询
GET lagou/job/_search { "query":{ "multi_match":{ "query":内容, "fields":[字段1^3,字段2...] # ^3表示权重 } } }
- 语法查询
GET lagou/job/_search { "query":{ "query_string":{ "query":"condition AND|OR condition", "fields":[字段1^3,字段2...] # ^3表示权重 } } }
- 范围查询(时间字段可以使用now关键字)
GET lagou/job/_search { "query":{ "range":{ "字段":{ "gte":10, "lte":20, "boost":2.0 # 权重 } } } }
组合查询
- bool查询
GET lagou/job/_search { "query":{ "bool":{ "filter":{ # 过滤字段 "查询方式":{ # "term"|"match"等 "字段":内容 } }, "must":[], # 条件必须全部满足 "should":[], # 条件满足其一 "must_not":[] # 必须一个不满足 } } }
- 查看分析器结果
GET _analyze { "analyzer":"ik_max_word", # 与ik_smart区别:ik_smart以最小词量分词,如工程师就不会再进行工程/师分词 "text":"内容" }
相关推荐
明瞳 2020-08-19
另外一部分,则需要先做聚类、分类处理,将聚合出的分类结果存入ES集群的聚类索引中。数据处理层的聚合结果存入ES中的指定索引,同时将每个聚合主题相关的数据存入每个document下面的某个field下。
sifeimeng 2020-08-03
心丨悦 2020-08-03
李玉志 2020-07-26
tigercn 2020-07-19
李玉志 2020-07-04
mengyue 2020-06-27
newbornzhao 2020-09-14
做对一件事很重要 2020-09-07
renjinlong 2020-09-03
李玉志 2020-08-19
mengyue 2020-08-07
molong0 2020-08-06
AFei00 2020-08-03
molong0 2020-08-03
wenwentana 2020-08-03
YYDU 2020-08-03