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”:”内容”
}
发表回复