ES 精确查询常用语句
批量插入数据
POST fh_xmyx_test/_doc/_bulk
{"index":{"_id":"1"}}
{"age":25,"name":"张三","hobby":"吃饭睡觉,撸代码","birthday":"1992-02-10","sex":"男"}
{"index":{"_id":"2"}}
{"age":15,"name":"李四","hobby":"吃鸡,王者,撸啊撸","birthday":"2002-08-01","sex":"女"}
{"index":{"_id":"3"}}
{"age":23,"name":"小南瓜","hobby":"吃鸡,吃肉,吃馒头","birthday":"2012-08-01","sex":"女"}
{"index":{"_id":"4"}}
{"age":10,"name":"王五","hobby":"吃饭睡觉,打南瓜","birthday":"2016-02-01","sex":"男"}
{"index":{"_id":"5"}}
{"age":8,"name":"王大拿","hobby":"看书,写字撸代码","birthday":"2006-02-01","sex":"男"}
{"index":{"_id":"6"}}
{"age":9,"name":"小明","hobby":"篮球,足球,乒乓球","birthday":"2010-02-01"}
修改数据
语法格式 index/type/id/_update(id为数据的ID)
POST fh_xmyx_test/_doc/1/_update
{"doc": {"desc":"测试"}
}
查看分词效果
使用指定分词器,对字符串进行分词
GET fh_xmyx_test/_analyze
{"analyzer": "ik_max_word","text": ["我是中国人"]
}
精确匹配
must,filter
- filter查询
GET fh_xmyx_test/_search
{"query": {"bool": {"filter": {"term": {"name.keyword": "小南瓜"}}}}
}
- must查询
filter在查询数据时不进行打分
GET fh_xmyx_test/_search
{"query": {"bool": {"must": [{"term": {"name.keyword": {"value": "张三"}}}]}}
}
- must与filter得区别
两者都可以写查询条件,而且语法也类似。区别在于,query 上下文的条件是用来给文档打分的,匹配越好 _score 越高;filter 的条件只产生两种结果:符合与不符合,后者被过滤掉。
must_not 类似与mysql中的 != 不等于
GET fh_xmyx_test/_search
{"query": {"bool": {"must_not": [{"terms": {"name.keyword": ["小南瓜","张三"]}}]}}
}
range 区间查询
range查询找出那些落在指定区间内的数字或者时间
使用的操作符如下:
gt 大于
gte 大于等于
lt 小于
lte 小于等于
GET fh_xmyx_test/_search
{"query": {"range": {"age": {"gte": 10,"lte": 20}}}
}
should 类似于 mysql中的or(多条件中只需满足一个条件)
GET fh_xmyx_test/_search
{"query": {"bool": {"should": [{"term": {"name.keyword": {"value": "李四"}}},{"range": {"age": {"gte": 10}}}]}}
}
exists
查询被用于查找那些指定字段中有值 (exists)
GET fh_xmyx_test/_search
{"query": {"bool": {"must": [{"exists": {"field": "sex"}}]}}
}
sort
排序字段,如果有多个排序字段,先匹配第一个排序字段,如果第一个排序字段相同,则匹配第二个排序字段
GET fh_xmyx_test/_search
{"sort": [{"birthday": {"order": "desc"}}]
}
script
如果需要比较索引中的两个字段值,可以使用这种方式
GET fh_xmyx_test/_search
{"query": {"bool": {"must": [{"script": {"script": {"source": "10 >= doc['age'].value"}}}]}}
}
模糊搜索
GET fh_xmyx_test/_search
{"query": {"wildcard": {"name.keyword": {"value": "*南*"}}}
}
_source 显示指定字段
GET fh_xmyx_test/_search
{"_source": ["name"]
}
from,size 分页参数
GET fh_xmyx_test/_search
{"from": 0, "size": 2
}
聚合查询
分组 (terms)
按照指定字段进行分组
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"groupBySex": { //自定义名称"terms": { //terms ES内置聚合函数"field": "sex.keyword" //需要进行分组的字段}}}
}
按照指定字段进行分组 并且显示分组后的数据
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"groupBySex": {"terms": {"field": "sex.keyword"},"aggs": {"name": {"top_hits": {"size": 10,"_source": "name"}}}}}
}
sum(求和)
求索引中的所有人的年龄加一起
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"sumByAge": {"sum": {"field": "age"}}}
}
count
根据索引中的某个字段进行统计数量
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"groupBySex": {"value_count": {"field": "sex.keyword"}}}
}
分割(histogram)
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"histogramDemo":{"histogram": {"field": "age","interval": 10,"min_doc_count": 0,"extended_bounds": {"min": 0,"max": 50}}}}
}
去重(cardinality)
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search-aggregations-metrics-cardinality-aggregation.html
在大数据量时,会出现统计值为近似值,不是准确的值
GET fh_xmyx_test/_search
{"size": 0, "aggs": {"dis":{"cardinality": {"field": "sex.keyword","precision_threshold": 100}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
