Elasticsearch的多种查询方式

这篇具有很好参考价值的文章主要介绍了Elasticsearch的多种查询方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Elasticsearch的查询方式

Elasticsearch(ES)提供了多种查询方式,可以根据不同的需求和场景选择合适的查询类型。

2. 常用的ES查询方式

  • Match Query(匹配查询): 根据字段中的内容进行全文匹配查询,可以使用match、multi_match等。

  • Term Query(精确查询): 根据字段中的精确值进行查询,适用于keyword类型或者已经执行过分词器的字段。

  • Range Query(范围查询): 根据字段中的范围值进行查询,可以用来查询数字或日期范围,例如大于、小于、范围内等。

  • Bool Query(布尔查询): 通过逻辑运算符(must、must_not、should)组合多个查询条件,实现更复杂的查询逻辑。

  • Match Phrase Query(短语匹配查询): 根据字段中连续的短语进行查询,适用于需要保持短语顺序的查询。

  • Prefix Query(前缀查询): 根据字段中的前缀进行查询,适用于需要按照前缀匹配查询的场景。

  • Wildcard Query(通配符查询): 根据通配符模式进行查询,支持通配符符号(*?)进行模糊匹配。

  • Fuzzy Query(模糊查询): 根据字段中的模糊匹配进行查询,可以通过设置fuzziness参数来控制模糊程度。

  • Nested Query(嵌套查询): 根据嵌套对象进行查询,以便查询嵌套在文档中的相关信息。

  • Aggregation Query(聚合查询): 用于计算、统计和分析数据,包括求和、平均值、最小值、最大值、分组等操作。

以上只是一些常见的查询方式,ES还提供了更多的查询类型和功能,如复杂查询、地理位置查询、正则表达式查询等,可根据实际需求选择合适的查询方式。

3. 查询案例

下面是一个包含各种查询案例的示例:

3.1 products的索引
product_name:产品名称,类型为text

category:产品类别,类型为keyword

price:产品价格,类型为float

description:产品描述,类型为text

tags:产品标签,类型为keyword

创建索引products:

PUT /products
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "product_name": {
        "type": "text"
      },
      "category": {
        "type": "keyword"
      },
      "price": {
        "type": "float"
      },
      "description": {
        "type": "text"
      },
      "tags": {
        "type": "keyword"
      }
    }
  }
}

创建了一个名为products的索引。 number_of_shards定义了主分片数为1。
number_of_replicas定义了副本数为1。 mappings定义了索引中的字段类型和属性。

3.2 Match Query(匹配查询)
POST /products/_search
{
  "query": {
    "match": {
      "product_name": "laptop"
    }
  }
}

使用match查询来进行全文匹配查询。 在product_name字段中匹配关键词"laptop"。
返回与"laptop"相关度最高的文档。

3.3 Term Query(精确查询)
POST /products/_search
{
  "query": {
    "term": {
      "category": "electronics"
    }
  }
}

使用term查询进行精确匹配查询。 在category字段中精确匹配"electronics"。
返回与"electronics"完全一致的文档。

3.4 Range Query(范围查询)
POST /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 500
      }
    }
  }
}

使用range查询进行范围查询。 在price字段中查询价格在100到500之间的文档。 返回价格在100到500之间的文档。

3.5 Bool Query(布尔查询)
POST /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "product_name": "laptop" } },
        { "term": { "category": "electronics" } }
      ],
      "must_not": [
        { "range": { "price": { "gte": 2000 } } }
      ],
      "should": [
        { "match": { "description": "lightweight" } },
        { "match": { "tags": "portable" } }
      ]
    }
  }
}

使用bool查询进行多条件查询逻辑。
must子句中同时满足product_name为"laptop"和category为"electronics"的文档。
must_not子句中排除价格大于等于2000的文档。
should子句中满足description包含"lightweight"或tags包含"portable"的文档。
返回符合以上条件的文档。

3.6 Match Phrase Query(短语匹配查询)
POST /products/_search
{
  "query": {
    "match_phrase": {
      "product_name": "red laptop"
    }
  }
}

使用match_phrase查询进行短语匹配查询。 在product_name字段中匹配短语"red laptop"。 返回包含短语"red
laptop"的文档。

3.7 Prefix Query(前缀查询)
POST /products/_search
{
  "query": {
    "prefix": {
      "product_name": "ca"
    }
  }
}

使用prefix查询进行前缀匹配查询。 在product_name字段中匹配以"ca"开头的文档。 返回以"ca"开头的产品名称的文档。

3.8 Wildcard Query(通配符查询)
POST /products/_search
{
  "query": {
    "wildcard": {
      "product_name": "l*t"
    }
  }
}

使用wildcard查询进行通配符模式匹配查询。 在product_name字段中匹配带有"l"和"t"之间任意字符的文档。
返回符合通配符模式的文档。

3.9 Fuzzy Query(模糊查询)
POST /products/_search
{
  "query": {
    "fuzzy": {
      "product_name": {
        "value": "laptop",
        "fuzziness": 2
      }
    }
  }
}

使用fuzzy查询进行模糊匹配查询。 在product_name字段中匹配与"laptop"相似的文档。
fuzziness参数设置了相似度为2。 返回与"laptop"相似的文档。

3.10 Nested Query(嵌套查询)
POST /products/_search
{
  "query": {
    "nested": {
      "path": "reviews",
      "query": {
        "match": {
          "reviews.comment": "good"
        }
      }
    }
  }
}

使用nested查询进行嵌套查询。 在reviews嵌套字段中根据reviews.comment字段的值查询"good"的文档。
返回包含满足嵌套查询条件的文档。

3.11 Aggregation Query(聚合查询)
POST /products/_search
{
  "size": 0,
  "aggregations": {
    "avg_price": {
      "avg": {
        "field": "price"
      }
    },
    "max_price": {
      "max": {
        "field": "price"
      }
    },
    "category_count": {
      "terms": {
        "field": "category"
      }
    }
  }
}

使用aggregations进行聚合查询。 avg聚合计算了price字段的平均值。 max聚合计算了price字段的最大值。
terms聚合按category字段进行分组统计。 返回计算和统计结果,包括平均价格、最高价格和每个分类的文档数量。文章来源地址https://www.toymoban.com/news/detail-518219.html

到了这里,关于Elasticsearch的多种查询方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • elasticsearch查询操作(API方式)

    elasticsearch查询操作(API方式)

    说明:elasticsearch查询操作除了使用DSL语句的方式(参考:elasticsearch查询操作(语句方式)),也可以使用API的方式。 使用前需先导入依赖 创建一个测试类,查询操作代码都写在测试类里面,首先先建立RestHighLevelClient的连接 (1)全部查询; 查询student索引库的所有文档;

    2024年02月14日
    浏览(11)
  • 【postgresql 基础入门】插入数据的多种方式 单条,多值,查询结果,插入数据冲突处理,批量导入,多种方式让数据插入更灵活

    ​ 专栏内容 : postgresql内核源码分析 手写数据库toadb 并发编程 ​ 开源贡献 : toadb开源库 个人主页 :我的主页 管理社区 :开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 入门准备 postgrersql基础架构 快速使用 初始化集群 数据库服务管理 psql客户

    2024年02月08日
    浏览(14)
  • ElasticSearch搜索技术深入与聚合查询实战

    ElasticSearch搜索技术深入与聚合查询实战

    分词器官方称之为文本分析器,顾名思义,是对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 分词器的处理过程发生在 Index Time 和 Search Time 两个时期。 Index Time:文档写入并创

    2024年02月06日
    浏览(13)
  • Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

    Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

    集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高,search 没有慢查询的状态。 2、集群压测性能不能上去,cpu 使用未打满,查询的 qps 上不去,且有队列堆积。 通过云厂商内核组的同

    2024年02月04日
    浏览(10)
  • Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)

    Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)

    ES中常用的查询类型往大了分可以分为简单查询,复合查询,聚合查询等; 而复合查询及聚合查询都是基于简单查询的;简单查询里面对条件的匹配方式又分为不同类型。term[s],match,match_all,match_phrase 等等 term 单词查询,在字段的倒排索引(发生分词)或者直接在字段值(

    2024年02月09日
    浏览(12)
  • Elasticsearch 查询全部数据,按照时间区间查询数据

    简介 在项目开发过程中需要从Elasticsearch中查询日志数据,下面介绍从Elasticsearch中查询索引全部数据,以及按照时间区间查询索引数据。 引入依赖 创建配置类 查询索引下的全部数据 按照时间区间查询索引数据

    2024年02月11日
    浏览(11)
  • Elasticsearch数据存储与查询

    Elasticsearch数据存储与查询 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库开发。它可以处理大量数据,提供快速、准确的搜索结果。Elasticsearch支持多种数据类型的存储和查询,如文本、数值、日期等。它还提供了强大的分析功能,如词频统计、提取等。

    2024年02月19日
    浏览(11)
  • ElasticSearch - 查询大于10000条的数据

    当我们使用 ES 的时候,有时会比较关心匹配到的文档总数是多少,所以在查询得到结果后会使用 hits.total.value 这个值作为匹配的总数。但是,es官方默认限制索引查询最多只能查询10000条数据。 因此可以将\\\"track_total_hits\\\"置为true ,解除最多查询10000条的限制:

    2024年02月16日
    浏览(9)
  • Elasticsearch数据结构与查询语法

    Elasticsearch是一个基于Lucene的搜索引擎,它提供了实时、可扩展、可伸缩的搜索功能。Elasticsearch是一个分布式、实时的、多用户的搜索和分析引擎。它是基于Lucene的搜索引擎,用于实时、可扩展、可伸缩的搜索功能。Elasticsearch是一个分布式、实时的、多用户的搜索和分析引擎

    2024年02月21日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包