共计 2253 个字符,预计需要花费 6 分钟才能阅读完成。
ElasticSearch
基于 lucene 的搜索服务器 (搜索引擎)
分布式多用户
基于 Restful
java 开发
ELK 日志分析系统
是一个 nosql
关系数据搜索缺点
无法打分
无法分布式
无法解析搜索请求
效率低
分词
安装
elasticsearch-rtf
elasticsearch-head: 可视化工具
kibana:操作管理 ES, 官网下载
概念
集群
节点
分片:一份数据分几份
副本:创建几份数据
倒排索引 (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”,
…
}
}
# 删除数据
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”:{
“properties”:{
“name”:{
“store”:true,(是否保存)
“type”: 属性,(即字段类型)
“analyzer”:”ik_max_word”(分析器,即分词类型)
},
“age”:{
“store”:true,
“type”: 属性 (如果是 keywork 则不会被分词)
},
“date”:{
“store”:true,
“type”:date,
“format”:”yy-MM-dd”
}
…
}
}
}
查询
基本查询
match 查询
GET lagou/job/_search
{
“query”:{
“match”:{
“ 字段 ”:内容
…
}
}
}
term 查询 (全量查询,必须完全匹配)
GET lagou/job/_search
{
“query”:{
“term”:{
“ 字段 ”:内容
…
}
}
}
terms 查询 (有一个匹配就返回,并且不是全量查询)
GET lagou/job/_search
{
“query”:{
“terms”:{
“ 字段 ”:[内容 1,…]
…
}
}
}
控制返回数量
GET lagou/job/_search
{
“query”:{
“match”:{
“ 字段 ”:内容
…
}
},
“form”:0,
“size”:3
}
match_all 查询
GET lagou/job/_search
{
“query”:{
“match_all”:{}
}
}
多字段查询
GET lagou/job/_search
{
“query”:{
“multi_match”:{
“query”: 内容,
“fields”:[字段 1^3, 字段 2 …] # ^3 表示权重
}
}
}
指定返回字段
GET lagou/job/_search
{
“stored_fields”:[字段 1, 字段 2 …],
“query”:{
“match”:{
“ 字段 ”:内容,
…
}
}
}
结果排序
GET lagou/job/_search
{
“query”:{
“match_all”:{}
}
“sort”:[{
“ 字段 ”:{
“order”:”desc”
}
}
]
}
范围查询(时间字段可以使用 now 关键字)
GET lagou/job/_search
{
“query”:{
“range”:{
“ 字段 ”:{
“gte”:10,
“lte”:20,
“boost”:2.0 # 权重
}
}
}
}
组合查询
bool 查询
bool:{
“filter”:[], # 过滤字段
“must”:[], # 条件必须全部满足
“should”:[], # 条件满足其一
“must_not”:[] # 必须一个不满足
}
GET lagou/job/_search
{
“query”:{
“bool”:{
“filter”:{
“ 查询方式 ”:{
“ 字段 ”:内容
}
}
}
}
}
查看分析器结果
GET _analyze
{
“analyzer”:”ik_max_word”, # 与 ik_smart 区别:ik_smart 以最小词量分词,如工程师就不会再进行工程 / 师分词
“text”:” 内容 ”
}