elasticsearch 基本语法(常见的RESTFUL API)

news2024/11/26 0:46:31

一 . ES的基本语法

文章目录

    • 一 . ES的基本语法
        • 1.Query String 语法
        • 2.Query DSL 语法
        • 3. Full-text queries 全文检索
        • 4. Phrase search 短语搜索
        • 5.Query and filter 查询和过滤
        • 6. Compound queries 查询
        • 7.HighLight search(高亮显示)

测试数据内容:

PUT /product/_doc/1
{
    "name" : "xiaomi phone",
    "desc" :  "shouji zhong de zhandouji",
    "price" :  3999,
    "tags": [ "xingjiabi", "fashao", "buka" ]
}
PUT /product/_doc/2
{
    "name" : "xiaomi nfc phone",
    "desc" :  "zhichi quangongneng nfc,shouji zhong de jianjiji",
    "price" :  4999,
    "tags": [ "xingjiabi", "fashao", "gongjiaoka" ]
}


PUT /product/_doc/3
{
    "name" : "nfc phone",
    "desc" :  "shouji zhong de hongzhaji",
    "price" :  2999,
    "tags": [ "xingjiabi", "fashao", "menjinka" ]
}

PUT /product/_doc/4
{
    "name" : "xiaomi erji",
    "desc" :  "erji zhong de huangmenji",
    "price" :  999,
    "tags": [ "low", "bufangshui", "yinzhicha" ]
}

PUT /product/_doc/5
{
    "name" : "hongmi erji",
    "desc" :  "erji zhong de kendeji",
    "price" :  399,
    "tags": [ "lowbee", "xuhangduan", "zhiliangx" ]
}

1.Query String 语法

timeout - - - 设置超时时间

GET /_search?timeout=1s

eq 语法

GET /_search/?q=name:xiaomi

③ 分页    from= 第几页面&size=每页显示的个数&sort=price:asc
注意:

按照字段排序之后查询结果score为null

2.Query DSL 语法

match_all - – -匹配所有

#匹配所有
GET /product/_search
{
  "query":{
    "match_all":{}
  }
}

match - - -根据属性的值去匹配

#根据具体的内容匹配
GET /product/_search
{
  "query":{
    "match": {
      "name": "nfc"
    }
  }
}

multi_match —多个字段匹配

#多字段匹配
GET /product/_search
{
  "query":{
    "multi_match":{
    "query":"nfc",
    "fields":["name","desc"]
    }
  }
}

_source - - -元数据只查询指定的字段不查询所有的字段

GET /product/_search
{
  "query":{
    "match":{
    "name":"nfc"
    }
  },
  "_source":["name"]
}

查询结果

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 0.90928507,
    "hits": [
      {
        "_index": "product",
        "_id": "3",
        "_score": 0.90928507,
        "_source": {
          "name": "nfc phone"
        }
      },
      {
        "_index": "product",
        "_id": "2",
        "_score": 0.76209855,
        "_source": {
          "name": "xiaomi nfc phone"
        }
      }
    ]
  }
}

⑤ 分页 from size

# 分页
GET /product/_search
{
  "query":{
    "match_all": {}
  },
  "from":1,
  "size":2
}

3. Full-text queries 全文检索

query-term:查询字段不会被分词

#query-term
GET /product/_search
{
  "query":{
    "term": {
        "name":"nfc"
    }
  }
}

matchterm 的区别

  1. term查询name为“”“nfc phone”的结果
GET /product/_search
{
  "query":{
    "term": {
        "name":"nfc phone" --这里没有分词 所以查询不到结果 
    }
  }
}

termmatch的区别?
term 是完全匹配,也就是精确查询。搜索前不会对搜索词在进行分词。
match是模糊匹配,首先会对搜索词进行相应得分词,在进行查询。

analyze - - - 验证分词

#验证分词
GET /_analyze
{
  "analyzer":"standard",
  "text":"xiaomi nfc zhineng phone"
}

分词结果

{
  "tokens": [
    {
      "token": "xiaomi",
      "start_offset": 0,
      "end_offset": 6,
      "type": "<ALPHANUM>",
      "position": 0
    },
    {
      "token": "nfc",
      "start_offset": 7,
      "end_offset": 10,
      "type": "<ALPHANUM>",
      "position": 1
    },
    {
      "token": "zhineng",
      "start_offset": 11,
      "end_offset": 18,
      "type": "<ALPHANUM>",
      "position": 2
    },
    {
      "token": "phone",
      "start_offset": 19,
      "end_offset": 24,
      "type": "<ALPHANUM>",
      "position": 3
    }
  ]
}

4. Phrase search 短语搜索

   短语搜索和全文搜索相反。举个例子“nfc phone”回座位一个短语去搜索

#短语搜索
GET /product/_search
{
  "query":{
    "match_phrase": {
      "name": "nfc phone"
    }
  }
}

搜索结果查的是name里面包含nfc phone的值
在这里插入图片描述

5.Query and filter 查询和过滤

bool:可以组合多个查询条件,bool查询也是采用 more_matches_is_better的机制,因此满足mustshould子句的文档将会合并起来计算分值。

  • must:必须满足

子句(查询)必须出现在匹配的文档中,并将有助于得分

  • filter:过滤器 不计算相关度分数

子句(查询)必须出现在匹配的文档中。但是不像must查询的分数将会被忽略。Filter子句在filter上下文中执行,这意味着计分被忽略,并且子句被考虑用户缓存。

  • should:可能满足等价于or

子句(查询)应出现在匹配的文档中。

  • must not:必须不满足 不计算相关度分数相当于 not的意思

子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为缓存。由于忽略计分,0因此将返回所有文档的分数。

  • minimun should match

顾名思义:最低匹配度,即条件在倒排索引中最低的匹配度。
a.传入参数为数字
b. 传入的参数为百分比
c. 组合方式
d. 多种组合条件

demo 案例

首先筛选出name包含“xiaomi phone” 并且价格大于1999的数据(不排序),然后搜索name包含“xiaomi” 和“desc”包含“shouji”

GET /product/_search
{
  "query":{
    "bool":{
      "must": [
        {"match": {"name": "xiaomi" }},
        {"match": {"desc": "shouji" }}
      ],
      "filter": [
        {"match_phrase":{"name":"xiaomi phone"}},
        {"range": {"price": {"gte": 1999}}}
      ]
    }
  }
}

查询结果
在这里插入图片描述

2.bool多条件 name包含xiaomi 不包含erji 描述里包不包含nfc都可以,price要大于等于4999

# bool多条件 name包含xiaomi 不包含erji 描述里包不包含nfc都可以,价钱要大于等于4999
GET /product/_search
{
  "query":{
    "bool":{
      "must": [{"match": {"name": "xiaomi"}}],
      "must_not": [{"match": {"name": "erji"}}],
      "should": [{"match": {"name": "nfc"}}],
      "filter": [
        {"range": {
          "price": {
            "gte": 4999
          }
        }}
      ]
    }
  }
}

查询显示
在这里插入图片描述
嵌套查询

  • minium should match :参数指定should返回的文档必须匹配子句的数量和百分百。如果bool查询包含至少一个should子句,而没有mustfilter子句,则默认值为1。否则,默认值为0

案例:筛选出name中包含nfc的,价格可以大于1999或者3999

#组合查询
GET /product/_search
{
  "query":{
    "bool":{
      "must": [
        {"match": {
          "name": "nfc"
        }}
      ],
      "should": [
        {"range": {
          "price": {
            "gt": 1999
            
          }
        }},
        {"range": {
          "price": {
            "gt": 3999
          }
        }}
      ],
      "minimum_should_match": 1
    }
  }
}

查询结果
在这里插入图片描述

6. Compound queries 查询

constant_score

constant_score:本意(常量分数),可以将一个不变的常量应用到所有匹配的文档中。它常用于只需要执行一个filter而没有其他查询(例如评分查询)的情况下。term查询被放置在constant_score中,转换成不评分的filter。这种方式可以用来只有filter的bool查询中。

相关性得分的计算规则:

每一个子查询都独自计算doc的相关性得分,一旦他们的得分被计算出来,bool查询就将这些得分进行合并并且返回一个代表整个bool操作的得分。

bool中只有filter操作,故使用constant_score代替了filter操作,且为每一个子查询设置了常量分数。

案例: 想要一台带NFC功能的 或者 小米的手机 但是不要耳机

GET /product/_search
{
  "query":{
    "constant_score": {
      "filter": {
        "bool": {
          "should":[
            {"term":{"name":"xiaomi"}},
            {"term":{"name":"nfc"}}
            ],
            "must_not":[
              {"term":{"name":"erji"}}
              ]
        }
      },
      "boost": 1.2
    }
  }
}

查询结果
在这里插入图片描述

constance_score 这种方式的查询影响的每个子查询的相关度分数,把每个子查询的相关度分数都设置为常量,忽略 TF/IDF 信息。

7.HighLight search(高亮显示)

# 高亮显示
GET /product/_search
{
  "query":{
    "match_phrase": {
      "name": "nfc phone"
    }
  },
  "highlight":{
   "fields": {
     "name":{}
   }
  }
}

查询显示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科研试剂 Dextran-DBCO;葡聚糖-二苯并环辛烯;生物可降解高分子聚合物

DBCO修饰的葡聚糖聚 Dextran-DBCO 葡聚糖-二苯并环辛烯 名称&#xff1a;DBCO修饰葡聚糖 英文名称&#xff1a;Dextran-DBCO 外观状态&#xff1a;白色粉末 溶剂&#xff1a;DMSO等常规有机溶剂。 性状&#xff1a;基于不同的分子量&#xff0c;呈白色/类白色固体粉末&…

python爬虫(一)

一、理论 &#xff08;1&#xff09;URL管理器&#xff1a;网页之间的链接很复杂&#xff0c;a指向b&#xff0c;b指向a&#xff0c;如果不对其进行管理则可能导致重复爬取、循环爬取&#xff0c;因此单独用该模块进行管理。URL管理器有两个功能&#xff0c;分别是URL队列管理&…

神策营销云平台化应用实践

营销云是一个业务系统&#xff0c;需要贴合客户的实际业务场景&#xff0c;以平台化 分层设计撬动场景发挥价值主张。本文将详细介绍神策营销云在数字化转型浪潮中的沉淀。点击文末“阅读原文”立即观看完整版演讲回放。一、神策营销云产品理念“营销云是一个业务系统”&#…

规范有效的需求变更管理,分7步走。

1、建立需求基线 需要提前建立需求基线&#xff0c;需求基线是需求变更的依据&#xff0c;并需制定双方皆认可的需求变更流程。 需对用户需求进行明确分析&#xff0c;颗粒度越小越好。基准文件定位范围越详细&#xff0c;双方对需求越清晰&#xff0c;用户交流顺畅&#xff0c…

Go语言context包源码剖析

context包的作用 context包是在go1.7版本中引入到标准库中的 context可以用来在goroutine之间传递上下文信息&#xff0c;相同的context可以传递给运行在不同goroutine中的函数&#xff0c;上下文对于多个goroutine同时使用是安全的&#xff0c;context包定义了上下文类型&am…

两数之和【每日一题】

⭐前言⭐ ※※※大家好&#xff01;我是同学〖森〗&#xff0c;一名计算机爱好者&#xff0c;今天让我们进入刷题模式。若有错误&#xff0c;请多多指教。更多有趣的代码请移步Gitee &#x1f44d; 点赞 ⭐ 收藏 &#x1f4dd;留言 都是我创作的最大的动力&#xff01; 合抱之木…

MySQL数据库自动补全工具

MySQL数据库操作起来命令较多&#xff0c;默认无法使用tab键进行补全&#xff0c;所以可以安装一些实用的工具进行日常的操作 方式一&#xff1a;临时使用自动补全功能 mysql -u root -p --auto-rehash 方式二&#xff1a;永久使用自动补全功能 vi /etc/my.cnf [mysql] a…

Qt扫盲-QSqlDatabase理论总结

QSqlDatabase理论总结一、概述二、使用1. 连接数据库2. 数据库驱动3. 自定义数据驱动使用4. 注意事项三、常用的功能一、概述 QSqlDatabase类提供了通过连接访问数据库的接口。QSqlDatabase的一个实例表示一个数据库连接对象。该连接是通过Qt支持的数据库驱动程序来对数据库的…

再学C语言26:分支和跳转——goto语句

goto语句包括两个部分&#xff1a;goto和一个标签名称 goto point1; 为使goto语句工作&#xff0c;程序中必须包含由point1标签定位的其他语句 point1: printf("hello world! \n"); // 标签 冒号 一条语句 示例代码&#xff1a; /* test of goto */ #include &…

高一数学试题-2022年秋期末试卷

一、选择题 已知集合A{x∈N∣−2<x<52}A \{x \in \mathbf{N}| -2 < x < \frac{5}{2}\}A{x∈N∣−2<x<25​}&#xff0c;B{−2,−1,0,1,2,4}B \{-2, -1, 0, 1, 2, 4\}B{−2,−1,0,1,2,4}&#xff0c;则A∩BA \cap BA∩B A. {−1,0,1,2}\{-1, 0, 1, 2\}{−…

什么是AI预训练模型?

什么是预训练模型? 预训练 AI 模型是一种深度学习模型&#xff0c;在大型数据集上进行训练以完成特定任务&#xff0c;它可以按原样使用或定制以满足多个行业的应用需求。 想象一下&#xff0c;试图教一个蹒跚学步的孩子什么是独角兽。 一个好的起点可能是展示该生物的子图像…

[NOIP2017 提高组] 奶酪(C++,并查集)

题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 hhh&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系中&#xff0c;奶酪的下表面…

用纯C实现单链表

前言 什么是单链表&#xff1f;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表的创建 需要创建一个小项目工程 创建三个文件 ⭐SListNode.h放单链表的头文件&#xff0c;函数声明 ⭐SListNode.c放单…

springcloud之Gateway服务网关

1.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…

游戏行业(北区)客户沙龙丨阿里云用户组北京站

2022 年 8 月 30 日&#xff0c;阿里云在北京举办了第 9 场阿里云用户组&#xff08;AUG&#xff09;活动&#xff0c;活动主题为“游戏行业&#xff08;北区&#xff09;客户沙龙”吸引了众多技术从业者及企业管理者来到现场交流分享。 通过本次活动&#xff0c;参会企业在不同…

Java探针技术详解

简介 在JVM中运行中&#xff0c;类是通过classLoader加载.class文件进行生成的。在类加载器加载.class文件生成对应的类对象之前时&#xff0c;我们可以通过修改.class文件内容&#xff08;就是字节码修改技术&#xff09;&#xff0c;达到修改类的目的。JDK提供了对字节码进行…

rhel配置zfs

rhel配置zfs环境声明ZFS简介ZFS块指针的结构ZFS的存储池布局rhel8/rhel9安装zfs始终在启动时加载OpenZFS模块开机自启zfs服务zfs基本操作查看磁盘创建pool和ZFS文件系统创建一个存储池设置zfs挂载点为多个用户创建起始目录向池中添加更多空间修改文件系统名称删除文件系统修改存…

数据库的存储引擎和事务

Mysql默认使用INNODB存储引擎 数据库中的各表均被&#xff08;在创建表时&#xff09;指定的存储引擎来处理。 服务器可用的引擎依赖于以下因素&#xff1a;MySql的版本、服务器在开发时如何被配置、启动选项 为了解当前服务器中有哪些存储引擎可用&#xff0c;可使用show e…

2022 年 项目中常用的工具函数

目录1. 数字千分位化&#xff0c;支持保留小数点2. 前端生成 uuid3. 传入日期换算出是周几4. 通过计算 text-indent 偏移的负值&#xff0c;实现文字居右隐藏, 右侧对齐 ...text5. 时间格式化函数6. 防抖和节流7. 前端文件流下载8. 后端返回 无格式化时间处理为格式化 20220101…

回收租赁商城系统功能拆解03讲-商品分类

回收租赁系统适用于物品回收、物品租赁、二手买卖交易等三大场景。 可以快速帮助企业搭建类似闲鱼回收/爱回收/爱租机/人人租等回收租赁商城。 回收租赁系统支持智能评估回收价格&#xff0c;后台调整最终回收价&#xff0c;用户同意回收后系统即刻放款&#xff0c;用户微信零…