ES 索引基本查询
GET /_cat // 列出可以查询 ES 集群的什么内容,类似 help 或 man 帮助一样
GET /_cat/health?v // 查看 ES 集群的健康情况: v是用来要求在结果中返回表头
GET /_cat/indices // 查看 ES 中所有的索引
GET /stardb_monitor_mysql*/_mapping // 查看指定索引 mapping
GET /stardb_monitor_mysql*/_search // 查看指定索引数据
DELETE stardb_monitor_mysql* // 删除指定索引
curl -XDELETE http://1.1.1.1:9200/stardb_monitor_system*
查看分词:
bash-4.2# cat test.json
{"text":"ElasticSearch 学习系统记录"}
bash-4.2#
bash-4.2# curl -H "Content-Type: application/json" http://1.1.1.1:9200/your_jndex/_analyze -d '@test.json';
{"tokens":[{"token":"elasticsearch","start_offset":0,"end_offset":13,"type":"<ALPHANUM>","position":0},{"token":"学","start_offset":14,"end_offset":15,"type":"<IDEOGRAPHIC>","position":1},{"token":"习","start_offset":15,"end_offset":16,"type":"<IDEOGRAPHIC>","position":2},{"token":"系","start_offset":16,"end_offset":17,"type":"<IDEOGRAPHIC>","position":3},{"token":"统","start_offset":17,"end_offset":18,"type":"<IDEOGRAPHIC>","position":4},{"token":"记","start_offset":18,"end_offset":19,"type":"<IDEOGRAPHIC>","position":5},{"token":"录","start_offset":19,"end_offset":20,"type":"<IDEOGRAPHIC>","position":6}]}bash-4.2#
bash-4.2#
ES 数据查询
filter 和 must 一样,匹配 filter 选项下的查询条件的文档才会被返回,但是 filter 不评分,只起到过滤功能,与 must_not 相反。
bash-4.2# curl -XGET -u 'admin:123456' -H "Content-Type: application/json" http://1.1.1.1:9200/stardb_monitor_mysql-*/_search?pretty -d '@rob.json'
bash-4.2# cat rob.json
{
"query":{
"bool": {
"filter":[
{
"range":{
"@timestamp":{
"lt":1665656134,
"gt":1665656145
}
}
},
{
"term":{
"ip":"192.168.0.244"
}
}
]
}
}
}
bash-4.2#
更复杂的查询样例:
{
"_source":["ip", "port", "mysql.status.var.read_only", "mysql.status.master"],
"size": 20,
"query":{
"bool": {
"filter":[
{
"range":{
"@timestamp":{
"lt":1662520380000,
"gt":1662520350000
}
}
},
{
"term":{
"ip":"172.25.28.25"
}
},
{
"term":{
"port": 8003
}
}
]
}
},
"sort": [
{
"@timestamp": {
"order": "asc"
}
},
{
"ip": {
"order": "asc"
}
}
]
}
全文查询
-
match 查询:用于搜索单个字段,首先会针对查询语句进行解析(经过 analyzer),主要是对查询语句进行分词,分词后查询语句的任何一个词项被匹配,文档就会被搜到, 默认情况下相当于对分词后词项进行 or 匹配操作。
如果想查询匹配所有关键词的文档,可以用 and 操作符连接。GET article/_search { "query": { "match": { "title": { "query": "Elasticsearch 查询优化" "operator": "or" //因为默认情况下相当于对分词后词项进行 or 匹配操作,所以该句可以省略 } } } }
-
match_phrase 查询:首先会把 query 内容分词,分词器可以自定义,同时文档还要满足以下两个条件才会被搜索到:
a.分词后所有词项都要出现在该字段中(相当于 and 操作)。
b.字段中的词项顺序要一致。GET test_idx/test_tp/_search { "query": { "match_phrase": { "desc": "what life" } } }
-
multi_match: 在多列上模糊查询关键词:
GET books/_search { "query": { "multi_match": { "query": "java 编程", "fields": ["title", "description"] } } }
词项查询:
-
term 查询:用来查找指定字段中包含给定单词的文档,term 查询不被解析,只有查询词和文档中的词精确匹配才会被搜索到,应用场景为查询人名、地名等需要精准匹配的需求。比如,查询 title 字段中含有关键词 “思想” 的书籍,查询命令如下:如果使用term查询,要确保字段是no analyzed的。建索引的时候要注意。
GET books/_search { "query": { "term": { "title": "思想" } } }
-
terms 查询:想查询 title 字段中包含关键词 “java” 或 “python” 的文档,构造查询语句如下:
{ "query": { "terms": { "title": ["java", "python"] } } }
聚合查询:
按照 ip group by:
{
"size": 0,
"aggs":{
"ip_alias": {
"terms":{
"field":"ip"
}
}
}
}