欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ElasticearchFilterQuery过滤查询--

时间:2023-07-25
Elasticearch Filter Query 过滤查询

1,过滤查询

ES查询操作分为2种:查询(query)和 过滤(filter)。
1、Query,默认计算每个返回文档的得分,然后根据得分排序。
2、Filter,只会筛选符合条件的文档,不计算得分,可以缓存文档。
注:单从性能考虑,过滤查询更快。过滤适合在大范围筛选数据,而查询适合精确匹配数据。一般应用时,先使用过滤操作过滤数据,然后使用查询匹配数据。

2,使用语法

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{}
],
“filter”: [
{}
]
}
}
}

注:
在执行 filter 和 query 时,先执行 filter 在执行 query
Elasticsearch 会自动缓存经常使用的过滤器,以加快性能

3,常见过滤类型

• term• terms• range• exists• ids

4,Filter query 案例
4.1,term 过滤查询

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“term”: {
“description”: “真”
}
}
]
}
}
}

4.2,terms 多值过滤查询

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“terms”: {
“age”: [
12,
11,
18,
20
]
}
}
]
}
}
}

4.3,range 范围过滤查询

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“term”: {
“description”: {
“value”: “西”
}
}
}
],
“filter”: [
{
“range”: {
“age”: {
“gte”: 10,
“lte”: 30
}
}
}
]
}
}
}

4.4,exists 存在过滤查询

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“range”: {
“age”: {
“gte”: 10,
“lte”: 18
}
}
}
],
“filter”: [
{
“exists”: {
“field”: “id”
}
}
]
}
}
}

4.5,ids 过滤查询

GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“ids”: {
“values”: [
1,
2,
3,
4,
5,
6
]
}
}
]
}
}
}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。