Elasticsearch中各种query的适用场景

Elasticsearch 提供了丰富的 Query 类型,以满足各种搜索需求。以下列举一些常见的 Query 类型,并分析其区别和应用场景:

一、 几个常用的基本Query

1. Term Query

  • 应用场景: 查找包含特定词语的文档,适合精确匹配单个词语的场景。
  • 特点: 与其他 Query 相比,Term Query 要求完全匹配目标词语。
  • 语法示例: { "query": { "term": { "``title``": "apple" } } }
    • 该示例将匹配所有 title字段值为 "apple" 的文档。

2. Match Query

  • 应用场景: 查找包含与目标词语相似或相关的词语的文档,适合模糊匹配文本。
  • 特点: Match Query 允许部分匹配和词形变化,可以理解为对 Term Query 的扩展。
  • 语法示例: { "query": { "match": { "title": "iphone" } } }
    • 该示例将匹配包含 "iphone"、"iPhones"、"iPhone" 等词语的文档。

3. Match Phrase Query

  • 应用场景: 查找包含特定短语的文档,要求短语中的词语顺序必须一致。
  • 特点: 不同于 Match Query 允许词序变化,Match Phrase Query 需要精确匹配短语中的所有词语,并保持其顺序。
  • 语法示例: { "query": { "match_phrase": { "description": "apple iphone 15" } } }
    • 该示例将匹配包含 "apple iphone 15" 这个完整短语的文档。

4. Wildcard Query

  • 应用场景: 查找包含特定模式的词语的文档,支持使用 "*" 和 "?" 通配符,类似SQL中的LIKE。
  • 特点: Wildcard Query 允许使用通配符匹配多个字符,灵活度更高,但这个查询效率比较较低,影响ES的性能,所以非必要是不建议用Wildcard Query的。
  • 语法示例: { "query": { "wildcard": { "``title``": "app*" } } }
    • 该示例将匹配所有以 "app" 开头的 title字段值,例如 "apple"、"appliance" 等。

5. Prefix Query

  • 应用场景: 查找包含以特定前缀开头的词语的文档。
  • 特点: Prefix Query 只匹配以特定前缀开头的词语,效率更高。
  • 语法示例: { "query": { "prefix": { "title": "app" } } }
    • 该示例将匹配所有以 "app" 开头的 title字段值,例如 "apple"、"appliance" 等。

6. Range Query

  • 应用场景: 查找满足特定条件的数值或日期范围的文档。
  • 特点: Range Query 可以指定数值或日期范围,并使用 "gte"、"gt"、"lte"、"lt" 等参数控制范围。
  • 语法示例: { "query": { "range": { "price": { "gte": 100, "lte": 200 } } } }
    • 该示例将匹配所有 price 字段值在 100 到 200 之间的文档。

二、 复杂查询构造

  • Bool Query: 可以组个多个query,同时使用 "must", "should", "must_not" 构建复杂条件查询,例如查找所有价格在 100 元到 200 元之间且标题为 "apple" 的产品。

    • 语法示例:

    { "query": { "bool": { "must": [ { "range": { "price": { "gte": 100, "lte": 200 } } }, { "term": { "title": "apple" } } ] } } }

  • Exists Query: 检查字段是否存在,查找包含特定字段的文档,例如查找所有包含 "description" 字段的文档。

    • 语法示例:

    { "query": { "exists": { "field": "description" } } }

  • Missing Query: 与上面相反检查字段是否不存在,查找不包含特定字段的文档,例如查找所有不包含 "description" 字段的文档。。

    • 语法示例:

    { "query": { "missing": { "field": "description" } } }

三、 几个特殊场景的 Query

  • Geo Distance Query: 查找按地理位置距离查找,例如查找距离用户当前位置 10 公里内的商店。

    • 语法示例:

    { "query": { "geo_distance": { "distance": "10km", "location": { "lat": 40.7128, "lon": -74.0060 } } } }

  • Nested Query: 对嵌套对象进行查询,例如查询每个用户的订单信息。

    • 语法示例:

    { "query": { "nested": { "path": "orders", "query": { "match": { "orders.product": "apple" } } } } }

  • Regexp Query: 使用正则表达式进行匹配,例如下面是一个查找所有包含电子邮件地址的例子。

    • 语法示例:

    { "query": { "regexp": { "email": ".+@.+\\..+" } } }

  • Fuzzy Query: 查找包含与目标词语相似或相关的词语的文档,例如查找所有包含 "appl" 或 "apple" 的产品。

    • 语法示例:

    { "query": { "fuzzy": { "title": { "value": "iphon", "fuzziness": 1 } } } }

四、 QueryString 和 Simple Query String

这两个query可以根据条件构建定制化的查询条件

  • QueryString Query: 支持使用 Lucene 语法进行复杂查询。

    • 语法示例:

    { "query": { "query_string": { "query": "brand:Apple AND price:[100 TO 200]" } } }

    • 应用场景: 自定义复杂查询条件,例如使用 "AND" 或 "OR" 连接多个条件。
  • Simple Query String Query: 简化的查询语法,支持基础的逻辑操作。

    • 语法示例:

    { "query": { "simple_query_string": { "query": "apple price > 100" } } }

    • 应用场景: 简单查询,例如查找包含 "apple" 并且价格大于 100 的产品。

选择合适的 Query 类型取决于具体的搜索需求,建议根据数据结构和搜索目的选择合适的 Query 类型,以提高查询效率和准确性。希望本文能帮助你更好地理解 Elasticsearch 中的 Query 类型,并灵活运用这些 Query 类型进行高效的搜索。

文章地址 Elasticsearch中各种query的适用场景 -- AI小站 (aisites.cn)

相关推荐
知见漫记4 小时前
AI 桌面 Agent 本地执行能力技术对照:沙箱机制与权限模式拆解
大数据·人工智能
xcl09255 小时前
幼儿托育系统开发实战:从需求分析到上线全流程指南
java·大数据·需求分析
cspttty5 小时前
国际经济与贸易专业考什么证对就业有帮助
大数据
足球魅力6 小时前
哪款足球软件能分析凯利指数大数据?
大数据·业界资讯
xwz小王子6 小时前
机器人的“最后一毫米”: 新加坡南洋理工大学Facet-0如何教会基础模型“感受”自己的动作?
大数据·人工智能·机器人
腾视科技-AI6 小时前
腾视科技AIBOX双版本重磅发布!本地安全与全球适配,解锁视频智能新可能
大数据·人工智能·科技·安全·大模型·腾视科技·ai算力盒
姜穆澜7 小时前
OneID 从 0 到 1 完整生产案例(五)
大数据·notepad++
geneculture7 小时前
《融智学:终结信息定义纷争的时代范式》 拓展分析述评
大数据·人工智能·信息科学·融智学的重要应用·哲学与科学统一性·融智时代(杂志)·比较分析
刘同学的 AI学习手记7 小时前
每日 AI PM 情报 · 2026-08-31
大数据·人工智能
Talordata7 小时前
從失控的價格爬蟲到可控的數據管線:一個跨境品牌數據團隊的重構手記
大数据·人工智能·ai·数据挖掘