ES常用多条件查询

ES常用多条件查询

1. bool 查询

含义:使用 mustfilter 条件,必须匹配 field1 的值为 value1,并且 field2 的值为 value2
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": [
        { "match": { "field1": "value1" } }
      ],
      "filter": [
        { "term": { "field2": "value2" } }
      ]
    }
  }
}'

2. must_not 查询

含义:排除 field1 的值为 value1 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must_not": [
        { "term": { "field1": "value1" } }
      ]
    }
  }
}'

3. should 查询

含义:至少满足一个条件,field1 的值为 value1field2 的值为 value2
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "should": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ],
      "minimum_should_match": 1
    }
  }
}'

4. range 查询

含义:范围查询,field1 的值在 10 到 20 之间。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "range": {
      "field1": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}'

5. exists 查询

含义:查询 field1 存在的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "exists": {
      "field": "field1"
    }
  }
}'

6. prefix 查询

含义:前缀查询,field1 的值以 val 开头。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "prefix": {
      "field1": "val"
    }
  }
}'

7. wildcard 查询

含义:通配符查询,field1 的值以 val 开头。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "wildcard": {
      "field1": "val*"
    }
  }
}'

8. regexp 查询

含义:正则表达式查询,field1 的值匹配正则表达式 val.*
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "regexp": {
      "field1": "val.*"
    }
  }
}'

9. fuzzy 查询

含义:模糊查询,field1 的值接近 value1
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "fuzzy": {
      "field1": {
        "value": "value1",
        "fuzziness": "AUTO"
      }
    }
  }
}'

10. ids 查询

含义:ID 查询,查询 ID 为 1, 2, 3 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "ids": {
      "values": ["1", "2", "3"]
    }
  }
}'

11. terms 查询

含义:多值匹配查询,field1 的值为 value1, value2, 或 value3
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "terms": {
      "field1": ["value1", "value2", "value3"]
    }
  }
}'

12. match 查询

含义:匹配查询,field1 的值为 value1
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "field1": "value1"
    }
  }
}'

13. match_phrase 查询

含义:短语匹配查询,field1 的值为 value1 value2
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_phrase": {
      "field1": "value1 value2"
    }
  }
}'

14. multi_match 查询

含义:多字段匹配查询,field1field2 的值为 value1
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "multi_match": {
      "query": "value1",
      "fields": ["field1", "field2"]
    }
  }
}'

15. constant_score 查询

含义:常量评分查询,field1 的值为 value1,并且提升评分为 1.2。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "constant_score": {
      "filter": {
        "term": { "field1": "value1" }
      },
      "boost": 1.2
    }
  }
}'

16. dis_max 查询

含义:不相交最大查询,field1 的值为 value1field2 的值为 value2,并且使用 tie_breaker 为 0.7。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "dis_max": {
      "queries": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ],
      "tie_breaker": 0.7
    }
  }
}'

17. function_score 查询

含义:函数评分查询,field1 的值为 value1,并且 field2 的值为 value2 时,权重为 2,评分模式为乘法。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "function_score": {
      "query": { "match": { "field1": "value1" } },
      "functions": [
        {
          "filter": { "term": { "field2": "value2" } },
          "weight": 2
        }
      ],
      "boost_mode": "multiply"
    }
  }
}'

18. nested 查询

含义:嵌套查询,nested_field.field1 的值为 value1
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "nested": {
      "path": "nested_field",
      "query": {
        "match": { "nested_field.field1": "value1" }
      }
    }
  }
}'

19. has_child 查询

含义:子文档查询,查询子文档类型为 child_typefield1 的值为 value1 的父文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "has_child": {
      "type": "child_type",
      "query": {
        "match": { "field1": "value1" }
      }
    }
  }
}'

20. has_parent 查询

含义:父文档查询,查询父文档类型为 parent_typefield1 的值为 value1 的子文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "has_parent": {
      "parent_type": "parent_type",
      "query": {
        "match": { "field1": "value1" }
      }
    }
  }
}'

21. geo_distance 查询

含义:地理距离查询,查询距离特定地理位置(lat, lon)在 200km 以内的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_distance": {
      "distance": "200km",
      "location": {
        "lat": 40,
        "lon": -70
      }
    }
  }
}'

22. geo_bounding_box 查询

含义:地理边界框查询,查询在特定边界框内的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_bounding_box": {
      "location": {
        "top_left": {
          "lat": 40.73,
          "lon": -74.1
        },
        "bottom_right": {
          "lat": 40.01,
          "lon": -71.12
        }
      }
    }
  }
}'

23. geo_polygon 查询

含义:地理多边形查询,查询在特定多边形内的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "geo_polygon": {
      "location": {
        "points": [
          { "lat": 40, "lon": -70 },
          { "lat": 30, "lon": -80 },
          { "lat": 20, "lon": -90 }
        ]
      }
    }
  }
}'

24. script 查询

含义:脚本查询,使用自定义脚本查询文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "script": {
      "script": {
        "source": "doc['field1'].value > params.value",
        "params": {
          "value": 5
        }
      }
    }
  }
}'

25. more_like_this 查询

含义:相似文档查询,查询与给定文本相似的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "more_like_this": {
      "fields": ["field1", "field2"],
      "like": "text to find similar documents",
      "min_term_freq": 1,
      "max_query_terms": 12
   好的,继续输出剩余的多条件查询操作。

### 25. `more_like_this` 查询

#### 含义:相似文档查询,查询与给定文本相似的文档。

```sh
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "more_like_this": {
      "fields": ["field1", "field2"],
      "like": "text to find similar documents",
      "min_term_freq": 1,
      "max_query_terms": 12
    }
  }
}'

26. percolate 查询

含义:预处理查询,查询与给定文档匹配的查询。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "percolate": {
      "field": "query",
      "document": {
        "field1": "value1",
        "field2": "value2"
      }
    }
  }
}'

27. span_term 查询

含义:跨度术语查询,查询 field1 的值为 value1 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_term": {
      "field1": "value1"
    }
  }
}'

28. span_near 查询

含义:跨度邻近查询,查询 field1 的值为 value1value2,并且它们之间的距离不超过 5 个词。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_near": {
      "clauses": [
        { "span_term": { "field1": "value1" } },
        { "span_term": { "field1": "value2" } }
      ],
      "slop": 5,
      "in_order": true
    }
  }
}'

29. span_or 查询

含义:跨度或查询,查询 field1 的值为 value1value2 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_or": {
      "clauses": [
        { "span_term": { "field1": "value1" } },
        { "span_term": { "field1": "value2" } }
      ]
    }
  }
}'

30. span_not 查询

含义:跨度非查询,查询 field1 的值为 value1,但不包含 value2 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_not": {
      "include": { "span_term": { "field1": "value1" } },
      "exclude": { "span_term": { "field1": "value2" } }
    }
  }
}'

31. span_containing 查询

含义:跨度包含查询,查询包含 field1 的值为 value1 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_containing": {
      "little": { "span_term": { "field1": "value1" } },
      "big": { "span_term": { "field2": "value2" } }
    }
  }
}'

32. span_within 查询

含义:跨度内查询,查询 field1 的值为 value1,并且在 field2 的值为 value2 的范围内。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_within": {
      "little": { "span_term": { "field1": "value1" } },
      "big": { "span_term": { "field2": "value2" } }
    }
  }
}'

33. span_first 查询

含义:跨度首查询,查询 field1 的值为 value1,并且在文档的前 3 个词内。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "span_first": {
      "match": { "span_term": { "field1": "value1" } },
      "end": 3
    }
  }
}'

34. exists 查询

含义:存在查询,查询 field1 存在的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "exists": {
      "field": "field1"
    }
  }
}'

35. prefix 查询

含义:前缀查询,查询 field1 的值以 value 为前缀的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "prefix": {
      "field1": "value"
    }
  }
}'

36. wildcard 查询

含义:通配符查询,查询 field1 的值匹配 val* 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "wildcard": {
      "field1": "val*"
    }
  }
}'

37. regexp 查询

含义:正则表达式查询,查询 field1 的值匹配正则表达式 value.* 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "regexp": {
      "field1": "value.*"
    }
  }
}'

38. fuzzy 查询

含义:模糊查询,查询 field1 的值为 value1,允许有编辑距离为 2 的模糊匹配。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "fuzzy": {
      "field1": {
        "value": "value1",
        "fuzziness": 2
      }
    }
  }
}'

39. type 查询

含义:类型查询,查询文档类型为 type1 的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "type": {
      "value": "type1"
    }
  }
}'

40. terms_set 查询

含义:术语集查询,查询 field1 的值包含在给定的术语集中的文档。
sh 复制代码
curl -X GET "localhost:9200/index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "terms_set": {
      "field1": {
        "terms": ["value1", "value2", "value3"],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}'
相关推荐
pokemon..1 小时前
MySQL主从复制与读写分离
数据库·mysql
码农鑫哥的日常1 小时前
MySQL高可用配置及故障切换
数据库·mysql
longlongqin1 小时前
redis的 stream数据类型实现 消息队列?
数据库·redis·缓存
一只积极向上的小咸鱼1 小时前
git常用命令总结
大数据·git·elasticsearch
wrx繁星点点1 小时前
多个线程同时写入一个共享变量,会发生什么问题?如何解决?
java·开发语言·数据库
鲨鱼辣椒ii2 小时前
sql中索引查看是否生效
数据库·sql
檀越剑指大厂2 小时前
【Elasticsearch系列】Elasticsearch中的分页
大数据·elasticsearch·搜索引擎
leidata2 小时前
MySQL系列—10.Innodb行格式
数据库·mysql
阿维的博客日记3 小时前
聚簇索引和二级索引
数据库·聚簇索引·二级索引
阿里云大数据AI技术3 小时前
阿里云Elasticsearch AI搜索实践
人工智能·elasticsearch·阿里云·rag