es安装
参考https://blog.csdn.net/okiwilldoit/article/details/137107087
再安装kibana,在它的控制台里写es查询语句。
es指南
es权威指南-中文版:
kibana用户手册-中文版:
es中文社区
es参考手册API
es客户端API
es查询语句
# 查询es版本
GET /
# 查询集群下所有index
GET /_cat/indices?v
# 查询节点
GET _cat/nodes?format=json
# 查询某个index的结构
GET /index_name/_mapping?pretty
#查询doc_id=123的详细信息
GET /index_name/_doc/123
# 查询作者为"猫腻"的作品,取出4个字段,100条数据,按照star_num和like_num倒排
GET /index_name/_search
{
"query" : {
"match" : {
"authorname" : "猫腻"
}
},
"_source": ["ID","title","authorname","desc"],
"size": 100,
"sort": [{"star_num": {"order": "desc"}}, {"like_num":{"order": "desc"}}]
}
es bool查询
Bool查询则可以实现查询的组合,并支持多字段查询和精确匹配、模糊匹配、范围匹配等多种查询方式。下面我们来看一下Bool查询的基本语法:
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2019-01-01" }}}
],
"should": [
{ "match": { "author": "John" }},
{ "match": { "author": "Doe" }}
],
"must_not": [
{ "match": { "category": "Marketing" }}
]
}
}
}
must:表示必须匹配的条件,相当于AND。
filter:表示过滤条件,可以提高查询效率,相当于WHERE。
should:表示应该匹配的条件,可以有多个,相当于OR。
must_not:表示必须不匹配的条件,相当于NOT。
在这个查询中,必须同时匹配 title 和 content 字段,同时 status 字段必须为 published,publish_date 字段必须大于等于 2019-01-01,并且 author 字段必须匹配 John 或者 Doe 中的至少一个,同时 category 字段不能匹配 Marketing
ES新增字段
在my_index索引表里新增new_feild字段
PUT my_index/_mapping
{
"properties": {
"new_feild" : {
"type" : "boolean",
"doc_values" : false
}
}
}
清空索引所有数据
POST /your_index/_delete_by_query
{
"query": {
"match_all": {}
}
}
ES更新字段
#更新单个字段
//字段名为item_name的值更新为2322332
POST index_name/_update/$id/
{
"doc": {
"item_name": "2322332"
}
}
#更新数组字段,新增值
//字段名是tags,是个多值字段
//tags更新前是["1"],更新后是["1","blue"]
POST index_name/_update/$id/
{
"script": {
"source": "ctx._source.tags.add(params.tag)",
"lang": "painless",
"params": {
"tag": "blue"
}
}
}
//判断是否存在,不存在再添加
POST index_name/_update/$id/
{
"script": {
"source": """
def tags = ctx._source.tags;
def value = "-1";
if (!tags.contains(value)) {
tags.add(value);
}
""",
"lang": "painless"
}
}
#更新数组字段,删除值
//字段名是tags,是个多值字段
//tags更新前是["1","blue"],删除值为"blue"后,变成["1"]
POST index_name/_update/$id/
{
"script": {
"source": """
for(int i = 0; i < ctx._source.tags.size(); i++) {
if(ctx._source.tags[i] == 'blue') {
ctx._source.tags.remove(i);
break;
}
}
""",
"lang": "painless"
}
}
ES SQL
6.3版本后支持SQL,但是不支持join等复杂操作。
https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-spec.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html
POST _sql?format=txt
{
"query": "SELECT author, title FROM index_name WHERE MATCH(title, '猎鬼') ORDER BY updateTime DESC LIMIT 100"
}
ES监控
通过kibana可以看到es的监控信息,包括每个索引的查询耗时等。