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)

相关推荐
你觉得20515 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙16 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
Elasticsearch16 小时前
Elasticsearch:使用机器学习生成筛选器和分类标签
elasticsearch
别惊鹊16 小时前
MapReduce工作原理
大数据·mapreduce
8K超高清16 小时前
中国8K摄像机:科技赋能文化传承新图景
大数据·人工智能·科技·物联网·智能硬件
2401_8712905817 小时前
MapReduce 的工作原理
大数据·mapreduce
SelectDB技术团队18 小时前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·数据仓库·人工智能·ai·数据分析·湖仓一体
你觉得20518 小时前
浙江大学朱霖潮研究员:《人工智能重塑科学与工程研究》以蛋白质结构预测为例|附PPT下载方法
大数据·人工智能·机器学习·ai·云计算·aigc·powerpoint
益莱储中国19 小时前
世界通信大会、嵌入式展及慕尼黑上海光博会亮点回顾
大数据
Loving_enjoy19 小时前
基于Hadoop的明星社交媒体影响力数据挖掘平台:设计与实现
大数据·hadoop·数据挖掘