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)

相关推荐
2401_883041082 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
青云交2 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
大数据·计算资源·应用案例·数据交互·impala 性能优化·机器学习融合·行业拓展
Json_181790144805 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
Qspace丨轻空间7 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Elastic 中国社区官方博客8 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
掘金-我是哪吒8 小时前
微服务mysql,redis,elasticsearch, kibana,cassandra,mongodb, kafka
redis·mysql·mongodb·elasticsearch·微服务
Aloudata9 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
水豚AI课代表9 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc
研究是为了理解10 小时前
Git Bash 常用命令
git·elasticsearch·bash
拓端研究室TRL12 小时前
【梯度提升专题】XGBoost、Adaboost、CatBoost预测合集:抗乳腺癌药物优化、信贷风控、比特币应用|附数据代码...
大数据