Discover
在查询框里,KQL
您可以输入 Elasticsearch 查询语句 来搜索您的数据
搜索关键字key
key:*
搜索关键字key,值value
key:value
搜索关键字key,值value1 或 value2
key:(value1 OR value2)
如果value中是一个很长的字符串,并且中间有短语 类似"my name is xxxx"
可以使用key:"my name"
对于数字字段您可以使用比较运算符,例如大于(>)、小于(<)或等于(=)
status>200
status>200 AND url_parameter_count>2
NOT status:200
Visualize 可视化视图
buckets:把符合您搜索条件的文档分成不同类别
Aggregation:聚合类型
Field:字段
Metrics:度量(常用count、Unique Count(选择设备唯一标识))
饼图Pie
画一个版本分布的饼图
- 点击 Split Slices 桶类别
- 从 Aggregation 列表中选择 Terms 。
-
从 Field 列表中选择 version 字段。
得到
我们在此饼图内,再加一个捅,比如查询每个版本年龄段的分布
- 点击 Split Slices 桶类别。
- 从 Aggregation 列表中选择 Range 。
- 从 Field 列表中选择 age 字段。
- 点击 Add Range 增加区间总数
- 定义以下区间:
0 18
18 30
30 50
折线图 Line
- 选择Y轴的Aggregation
- 给Y轴起个名字Custom label
3.创建一个bucket,指定Aggregation
4.创建x轴
Dev Tools (ES语法)
常用关键字
_search:按条件搜索
_count:查询符合条件的数量
query:搜索参数
match:模糊搜索,分词
term:精准搜索,erm结合bool使用,不进行分词
should是或,must是与,must_not是
- match_all: 匹配所有
GET /索引/_search
{
"query":{
"match_all": {}
}
}
- match:name中包含“nfc”
GET /索引/_search
{
"query": {
"match": {
"name": "nfc"
}
}
}
3、 sort:按照价格倒序排序
GET /索引/_search
{
"query": {
"multi_match": {
"query": "nfc",
"fields": ["name","desc"]
}
},
"sort": [
{
"price": "desc"
}
]
}
4、 multi_match:根据多个字段查询一个关键词,name和desc中包含“nfc”的doc
GET /索引/_search
{
"query": {
"multi_match": {
"query": "nfc",
"fields": ["name","desc"]
}
},
"sort": [
{
"price": "desc"
}
]
}
5、_source 元数据:想要查询多个字段,例子中为只查询“name”和“price”字段。
GET /索引/_search
{
"query":{
"match": {
"name": "nfc"
}
},
"_source": ["name","price"]
}
6、分页(deep-paging):查询第一页(每页两条数据)
GET /product/_search
{
"query":{
"match_all": {}
},
"sort": [
{
"price": "asc"
}
],
"from": 0,
"size": 2
}
1、bool
可以组合多个查询条件,bool查询也是采用more_matches_is_better的机制,因此满足must和should子句的文档将会合并起来计算分值。
①must:必须满足
子句(查询)必须出现在匹配的文档中,并将有助于得分。
②filter:过滤器,不计算相关度分数
子句(查询)必须出现在匹配的文档中。但是不像 must查询的分数将被忽略。
Filter子句在filter上下文中执行,这意味着计分被忽略,并且子句被考虑用于缓存。
③should:可能满足 or
子句(查询)应出现在匹配的文档中。
④must_not:必须不满足 不计算相关度分数
子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略
并且子句被视为用于缓存。由于忽略计分,0因此将返回所有文档的分数。
⑤minimum_should_match:should配合使用,满足几个should条件
⑥range:lt大于,gt小于
bool多条件 name包含xiaomi 不包含erji 描述里包不包含nfc都可以,价钱要大于等于4999
GET /product/_search
{
"query": {
"bool":{
#name中必须不能包含“erji”
"must": [
{"match": { "name": "xiaomi"}}
],
#name中必须包含“xiaomi”
"must_not": [
{"match": { "name": "erji"}}
],
#should中至少满足0个条件,参见下面的minimum_should_match的解释
"should": [
{"match": {
"desc": "nfc"
}}
],
#筛选价格大于4999的doc
"filter": [
{"range": {
"price": {
"gt": 4999
}
}}
]
}
}
}
组合查询
搜索一台xiaomi nfc phone或者一台满足 是一台手机 并且 价格小于等于2999
GET /product/_search
{
"query": {
"constant_score": {
"filter": {
"bool":{
"should":[
{"match_phrase":{"name":"xiaomi nfc phone"}},
{
"bool":{
"must":[
{"term":{"name":"phone"}},
{"range":{"price":{"lte":"2999"}}}
]
}
}
]
}
}
}
}
}
高亮
GET /product/_search
{
"query" : {
"match_phrase" : {
"name" : "nfc phone"
}
},
"highlight":{
"fields":{
"name":{}
}
}
}