Elasticsearch 查询语句概述

news/2024/7/7 5:53:39 标签: elasticsearch, 大数据, 搜索引擎

目录

1. Match Query

2. Term Query

3. Terms Query

4. Range Query

5. Bool Query

6. Wildcard Query

7. Fuzzy Query

8. Prefix Query

9. Aggregation Query


     Elasticsearch 是一个基于 Lucene 的搜索引擎,提供了丰富的查询DSL(Domain Specific Language)用于执行搜索操作。以下是Elasticsearch中常用的查询语句类型、作用、使用场景、注意事项以及每种查询的实际例子。

1. Match Query

  • 作用:对文本进行全文搜索,包括模糊匹配。
  • 使用场景:适用于搜索文本字段。
  • 注意事项:默认情况下,对于多词搜索会采用OR操作符,可以通过operator参数修改。
  • 例子
    {
      "query": {
        "match": {
          "message": "this is a test"
        }
      }
    }

2. Term Query

  • 作用:用于精确值匹配,不会对搜索词进行分词。
  • 使用场景:适用于关键字、数字、日期等精确值字段的精确查询。
  • 注意事项:不适用于文本字段,因为文本字段会在索引时分词。
  • 例子

    {
      "query": {
        "term": {
          "status": {
            "value": "active"
          }
        }
      }
    }

3. Terms Query

  • 作用:与term query类似,但允许指定多个精确值。
  • 使用场景:当需要匹配多个精确值时使用。
  • 注意事项:与term query相同,不适用于文本字段。
  • 例子
    {
      "query": {
        "terms": {
          "status": ["active", "pending"]
        }
      }
    }

4. Range Query

  • 作用:用于查找在某个范围内的值。
  • 使用场景:适用于数字、日期等类型的范围查询。
  • 注意事项:可以使用gt、lt、gte、lte等操作符指定范围。
  • 例子
    {
      "query": {
        "range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }
      }
    }

5. Bool Query

  • 作用:允许组合多个查询,如must、should、must_not。
  • 使用场景:当需要执行复杂的查询逻辑时使用。
  • 注意事项:should子句在没有must或filter时至少需要匹配一个条件。
  • 例子
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "title": "search" } },
            { "match": { "content": "Elasticsearch" } }
          ],
          "must_not": [
            { "range": { "age": { "gte": 30 } } }
          ],
          "should": [
            { "term": { "tag": "wow" } },
            { "term": { "tag": "elasticsearch" } }
          ],
          "minimum_should_match": 1,
          "boost": 1.0
        }
      }
    }

6. Wildcard Query

  • 作用:支持使用通配符的模糊查询。
  • 使用场景:在不确定完整词项时使用。
  • 注意事项:通配符查询可能会影响性能,应谨慎使用。
  • 例子
    {
      "query": {
        "wildcard": {
          "user": {
            "value": "ki*y"
          }
        }
      }
    }

7. Fuzzy Query

  • 作用:基于Levenshtein编辑距离的模糊查询。
  • 使用场景:在处理用户输入错误的情况下很有用。
  • 注意事项:模糊查询会消耗更多的资源,应适度使用。
  • 例子
    {
      "query": {
        "fuzzy": {
          "name": {
            "value": "kiim",
            "fuzziness": 2
          }
        }
      }
    }

8. Prefix Query

  • 作用:搜索具有指定前缀的词项。
  • 使用场景:适用于自动补全功能。
  • 注意事项:与通配符查询一样,可能会影响性能。
  • 例子
    {
      "query": {
        "prefix": {
          "user": {
            "value": "ki"
          }
        }
      }
    }

9. Aggregation Query

  • 作用:用于执行复杂的数据分析和汇总。
  • 使用场景:统计分析,如计数、平均值、最大/最小值等。
  • 注意事项:聚合查询可以消耗大量资源,应合理设计。
  • 例子
    {
      "size": 0,
      "aggs": {
        "group_by_state": {
          "terms": {
            "field": "state.keyword"
          }
        }
      }
    }

http://www.niftyadmin.cn/n/5338481.html

相关文章

【备战蓝桥杯】探索Python内置标准库collections的使用

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-q0zvWxZtAIdSGZ8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

柠檬微趣面试准备

简单介绍一下spring原理 Spring框架是一个开源的Java应用程序框架,它提供了广泛的基础设施支持,帮助开发者构建Java应用程序。Spring的设计原则包括依赖注入(DI)和面向切面编程(AOP)等,以促使代…

vectorCast添加边界值分析测试用例

1.1创建项目成功后会自动生成封装好的函数,在这些封装好的函数上点击右键,添加边界值分析测试用例,如下图所示。 1.2生成的用例模版是不可以直接运行的,需要我们分别点击它们,让它们自动生成相应测试用例。如下图所示,分别为变化前和变化后。 1.3点击选中生成的测试用例,…

【Linux】02 Ubantu交叉编工具的安装

一、解压交叉编译链 对交叉编译工具进行解压,解压命令如下: sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 二、记录bin文件路径 使用 pwd 命令记录交叉编译链的bin文件路径 三、修改环境变量 使用 vim 打开/etc/profil…

Java设计模式详解-更新中

收藏和关注的同时,请也关注 公众号 “IT技术馆” 各位大家好,从今天开始,作者开始整理 《JAVA软件设计模式(GOF)》 专栏。请各位多多关注! 该专栏是根据作者的技术经验和设计模式的了解,进行详…

【Vue】属性计算 computed

<script setup>import { ref,computed} from vue let hbs ref([]); //装爱好的值const publishHbsMessagecomputed(()>{return hbs.value.length>0?Yes:No}) </script><template><div>吃 <input type"checkbox" name"hbs&qu…

Dart语言中的布尔类型详解及实例应用

在Dart编程语言中&#xff0c;布尔&#xff08;Bool&#xff09;类型是一种基本的数据类型&#xff0c;用于表示逻辑上的真和假。布尔类型的值只有两个&#xff1a;true和false。接下来我们将深入探讨Dart中布尔类型的定义以及如何在条件判断语句中使用它们。 1. 布尔类型的定…

剑指 Offer 39.数组中出现次数超过一半的数字

剑指 Offer 39.数组中出现次数超过一半的数字 剑指 Offer 39.数组中出现次数超过一半的数字 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存…