es使用教程-常用搜索语法

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

es使用教程-常用搜索语法

插入测试查询数据,注意这里已安装ik中文分词器

PUT mytest
{
  "mappings": {
    "properties": {
      "join_field": {
        "type": "join",
        "relations": {
          "parent": "child"
        }
      },
      "name": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "city": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "hobbies":{
        "type": "keyword"
      },
      "desc": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "family":{
        "properties": {
            "father":{
              "type":"keyword"
            },
            "mather":{
              "type":"keyword"
            }
        }
      }
    }
  }
}

POST mytest/_bulk
{"index":{}}
{"name":"张三","age":"20","city":"广州","desc":"我是程序员,毕业于清华大学","hobbies":["唱歌","跳舞","rape"],"join_field": "parent"}
{"index":{}}
{"name":"李四","age":"27","city":"北京","desc":"我是宅男平时喜欢看动漫","hobbies":["动漫","cosplay","游戏"],"join_field": "parent"}
{"index":{}}
{"name":"王五","age":"31","city":"广州","desc":"我是快递员,每天都上门送快递","join": "parent","family":{"father":"王爸","mather":"王妈"}}
{"index":{}}
{"name":"小七","age":"40","city":"昆明","desc":"我是名医生,每天救死扶伤","join": "parent","family":{"father":"小爸","mather":"小妈"}}

// 子文档

POST /mytest/_doc/1?routing=1
{
  "join_field": {
    "name"  : "child",
    "parent": "BYELg4MBLEd9Buf4tGhT" // 父文档id 
  },
  "friends": "tom"
}

POST /mytest/_doc/2?routing=1
{
  "join_field": {
    "name"  : "child",
    "parent": "BoELg4MBLEd9Buf4tGhT"// 父文档id 
  },
  "friends": "king"
}

查询所有

GET /mytest/_doc/_search
{
  "query":{
    "match_all":{}
  }
}

一、单条件查询

1、模糊匹配

1.1 match

模糊查询,类似数据库的like ‘%三%’,查询出名字带有三的数据

GET /mytest/_doc/_search
{
  "query":{
    "match":{
      "name":"三"
    }
  }
}

1.2 prefix

前缀查询,查询前缀为王的数据

GET /mytest/_doc/_search
{
  "query":{
    "prefix":{
      "name":"王"
    }
  }
}

1.3 regexp

正则匹配,使用正则表达式去匹配,例子是匹配年龄小于二十岁的

GET /mytest/_doc/_search
{
  "query":{
    "regexp":{
      "age":"[0-2][0-9]"
    }
  }
}

 

2、精确匹配

2.1 term

精确匹配相当于=,需要与字段的值完全匹配,注意搜索的字段必须type=keyword,否则效果跟match一样

GET /mytest/_doc/_search
{
  "query":{
    "term":{
      "name":"张三"
    }
  }
}

2.2 terms

精确匹配多个值

GET /mytest/_doc/_search
{
  "query":{
    "terms":{
      "name":["张三","李四"]
    }
  }
}

2.3 range

字段属于某个范围内的值

GET /mytest/_doc/_search
{
  "query":{
    "range": { 
        "age": { 
            "gte":  20, 
            "lt":   30 
        } 
    }
  }
}

2.4 exists

某个字段的值是否存在,相当于mysql的is not null

 

GET /mytest/_doc/_search
{
  "query":{
    "exists": {
      "field":"hobbies"
    }
  }
}

二、多条件查询

1、bool 布尔查询

1.1 must

各个条件都必须满足,即各条件是and的 关系

GET /mytest/_doc/_search
{
  "query":{
    "bool": {
      "must": [
         {
           "match":{
              "city":"广州"
            }
         },
          { "range":{
              "age":{
                  "lt":"30"
              }
           }
          }
      ]
    }
  }
}

 

1.2 should

各个条件有一个满足即可,即各条件 是or的关系

GET /mytest/_doc/_search
{
  "query":{
    "bool": {
      "should": [
         {
           "match":{
              "city":"广州"
            }
         },
          { "range":{
              "age":{
                  "lt":"30"
              }
           }
          }
      ]
    }
  }
}

 

1.2 must_not

不满足所有条件,即各条件是not的 关系

GET /mytest/_doc/_search
{
  "query":{
    "bool": {
      "must_not": [
         {
           "match":{
              "city":"广州"
            }
         },
          { "range":{
              "age":{
                  "lt":"30"
              }
           }
          }
      ]
    }
  }
}

 

1.3 filter

不计算相关度评分,它不计算_score 即相关度评分,效率更高

GET /mytest/_doc/_search
{
  "query":{
    "bool": {
      "filter": [
         {
           "match":{
              "city":"广州"
            }
         },
          { "range":{
              "age":{
                  "lt":"30"
              }
           }
          }
      ]
    }
  }
}

2、constant_score

忽略TF/IDF打分,给搜索固定分数

GET /mytest/_doc/_search
{
  "query":{
    "bool": {
      "should": [
         {
           "constant_score": {
          "filter": { "match": { "desc": "wifi" }},
          "boost":   2 
        }
         },
          { "range":{
              "age":{
                  "lt":"30"
              }
           }
          }
      ]
    }
  }
}

3、取分数最高的,不考虑其他项的分数

取分数最高的,不考虑其他项的分数

GET /mytest/_doc/_search
{
  "query":{
    "dis_max": {
            "queries": [
                { "match": { "city": "广州" }},
                { "match": { "desc":  "我是" }}
            ]
      }
  }
}

三、链接查询

1、父子文档

查询子文档有某个字段

GET /mytest/_doc/_search
{
  "query": {
    "has_child": {
      "type" : "child",
      "query": {
        "match": {
          "friends": "tom"
        }
      }
    }
  }
}

2、嵌套文档

GET /mytest/_doc/_search
{
  "query": {
    "match": {
      "family.father" : "王"
    }
  }
}

四、聚合

1、查询平均年龄

GET /mytest/_doc/_search
{
  "query": {
    "match_all": {
    }
  },
  "aggs": {
    "my-agg-name": {
      "avg": {
        "field": "age"
      }
    }
  }
}

2、查询最小年龄

GET /mytest/_doc/_search
{
  "query": {
    "match_all": {
    }
  },
  "aggs": {
    "my-agg-name": {
      "min": {
        "field": "age"
      }
    }
  }
}

3、最大年龄

GET /mytest/_doc/_search
{
  "query": {
    "match_all": {
    }
  },
  "aggs": {
    "my-agg-name": {
      "max": {
        "field": "age"
      }
    }
  }
}

4、统计总年龄文章来源地址https://www.toymoban.com/news/detail-411904.html

GET /mytest/_doc/_search
{
  "query": {
    "match_all": {
    }
  },
  "aggs": {
    "my-agg-name": {
      "sum": {
        "field": "age"
      }
    }
  }
}

到了这里,关于es使用教程-常用搜索语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • es使用和常用查询(包含多字段聚合查询,实体类方式保存es)

    1.导入es相关jar包 2.增加es配置 3.读取es相关配置   4.创建es实体类,与es mapping设计一致  5.创建es结构  6.创建类继承 ElasticsearchRepository 实现通过api保存实体类ESData到es  7.保存实体类ESData到es  8.es查询 多字段匹配查询,分组查询,分组后聚合

    2024年02月03日
    浏览(39)
  • Elasticsearch实战(十七)---ES搜索如何使用In操作查询及如何Distinct去除重复数据

    Elasticsearch实战-ES搜索如何使用In操作查询filter过滤及如何Distinct去除重复数据 场景: ES搜索, 获取手机号是 19000001111 或者 19000003333 后者 19000004444 的人, 并且 性别是男, 且 年龄是[20-30]的人,这种查询用mysql 如何实现 ? 在mysql中会用in查询, 但是在ES中 我们实现就是 term

    2023年04月09日
    浏览(33)
  • ES 聚合分组查询 语法

    ES 聚合分组查询的语法如下: 其中 index 是索引名称, size 设置为 0 意味着只返回聚合结果而不返回文档。 aggs 字段是聚合查询的核心部分,这里以 group_by_field 为例进行分组查询,其中 terms 指定了分组的字段名称。 这样的查询会返回按照 field_name 字段进行分组后每个分组的

    2024年02月11日
    浏览(28)
  • 相关搜索引擎常用搜索语法(Google hacking语法和FOFA语法)

    一:Google Hack语法      Google Hacking原指利用Google搜索引擎搜索信息来进行入侵的技术和行为,现指利用各种搜索引擎并使用一些高级的搜索语法来搜索信息。既利用搜索引擎强大的搜索功能,在在浩瀚的互联网中搜索到我们需要的信息。 (一)常用基本搜索语法 1)完整搜

    2024年02月12日
    浏览(44)
  • ES各种查询语法及响应结果

    目录 查询 创建 删除请求 1. 删除索引  数据类型 一、创建索引     1.1 创建book_test索引     1.2 查看索引映射     1.3 添加文档记录     1.4 查询文档     1.6 删除文档中某一条数据 二、查询语法 2.1 termterms查询 2.2 match查询属于高层查询,他会根据你查询的字段类型不一样

    2023年04月09日
    浏览(34)
  • 【DSL】ES+DSL 查询语法

    一、前言 工作中遇到ES的查询问题,由于业务方给的条件不清晰,有些查询无法实现,需要用到DSL语法查询实现,很久没用生疏了,借此机会复习下。 二、定义 1.基本介绍 Elasticsearch(简称为ES ),一个开源的分布式搜索和分析引擎,主要用于处理大量数据并提供快速、实时

    2024年02月12日
    浏览(34)
  • Springboot 整合ElasticSearch 常用的插入查询,模糊查询,范围查询

    repository.deleteById(id); } catch (Exception ex) { ex.printStackTrace(); return false; } return true; } public Dog saveDog(Dog dog) { try { Dog save = repository.save(dog); System.out.println(“结果:”+save.toString()); return save; } catch (Exception ex) { ex.printStackTrace(); return null; } } public Boolean saveDogAll(List dogsList) { try { reposit

    2024年04月22日
    浏览(30)
  • Java操作es插入数据后,立即查询没结果解决办法

    原因:ES默认不执行刷新操作,需要手动设置参数才能在更新文档后立即刷新。 从以下源码中可以看出刷新策略有三种: NONE(“false”)、IMMEDIATE(“true”)、WAIT_UNTIL(“wait_for”) 添加位置如下: 官网地址:es批量操作官方文档 注:默认是不进行刷新的,因此需要手动添加进行刷

    2024年02月12日
    浏览(36)
  • Google搜索语法(常用篇)

    Google是一款十分强大的搜索引擎,黑客们常常借助它搜索网站的一些敏感目录和文件,甚至可以利用它的搜索功能来自动攻击那些有漏洞的网站;而有些人可以通过搜索把某个个人的信息,包括住址、电话号码、出生年月等都可以搜索出来;当然我们在日常的生活中正确的借

    2023年04月08日
    浏览(31)
  • ES-搜索和查询

    Query DSL(Domain Specific Language) 1 查询上下文 ​ 使用query进行检索,倾向于相关度搜索,故需要计算评分。搜索是Elasticsearch最关键和重要的部分。 2 相关度评分:_score ​ 概念:相关度评分用于对搜索结果排序,评分越高则认为其结果和搜索的预期值相关度越高,即越符合

    2024年02月04日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包