您的位置:首页 > 游戏 > 手游 > Elasticsearch中各种query的适用场景

Elasticsearch中各种query的适用场景

2024/11/16 11:49:17 来源:https://blog.csdn.net/dongtest/article/details/139558619  浏览:    关键词:Elasticsearch中各种query的适用场景

Elasticsearch

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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com