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

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

一 . ES的基本语法


测试数据内容:
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的值
elasticsearch 基本语法(常见的RESTFUL API)

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}}}
      ]
    }
  }
}

查询结果
elasticsearch 基本语法(常见的RESTFUL API)

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
          }
        }}
      ]
    }
  }
}

查询显示
elasticsearch 基本语法(常见的RESTFUL API)
嵌套查询

  • 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
    }
  }
}

查询结果
elasticsearch 基本语法(常见的RESTFUL API)

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
    }
  }
}

查询结果
elasticsearch 基本语法(常见的RESTFUL API)

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

7.HighLight search(高亮显示)
# 高亮显示
GET /product/_search
{
  "query":{
    "match_phrase": {
      "name": "nfc phone"
    }
  },
  "highlight":{
   "fields": {
     "name":{}
   }
  }
}

查询显示
elasticsearch 基本语法(常见的RESTFUL API)文章来源地址https://www.toymoban.com/news/detail-408500.html

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

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

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

相关文章

  • ElasticSearch篇——Restful风格详解以及常见的命令,涵盖_cat命令查看ES默认数据、索引和文档的增删改查以及复杂搜索,超详细、超全面、超细节!

    一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要是用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更加简洁,更有层次,更易于实现缓存等机制。 一、基本Rest命令说明 1、命令 对应的就是head可视化界面的下面的信息(换句话

    2024年01月16日
    浏览(46)
  • elasticsearch 笔记二:搜索DSL 语法(搜索API、Query DSL)

    从索引 tweet 里面搜索字段 user 为 kimchy 的记录 从索引 tweet,user 里面搜索字段 user 为 kimchy 的记录 从所有索引里面搜索字段 tag 为 wow 的记录 说明:搜索的端点地址可以是多索引多 mapping type 的。搜索的参数可作为 URI 请求参数给出,也可用 request body 给出 URI 搜索方式通过 URI

    2024年02月04日
    浏览(56)
  • ElasticSearch基本api操作

    本文章下列所用es本意都为Elaticsearch Elaticsearch ,简称为es, es是一 个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好, 可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索弓和搜

    2024年02月05日
    浏览(45)
  • ElasticSearch Java API 基本操作

    ElasticSearch Java API是ES官方在8.x版本推出的新java api,也可以适用于7.17.x版本的es。 本文主要参考了相关博文,自己手动编写了下相关操作代码,包括更新mappings等操作的java代码。 代码示例已上传github。 elasticsearch 版本: 7.17.9 ,修改 /elasticsearch-7.17.9/config/elasticsearch.yml ,新增

    2024年02月08日
    浏览(47)
  • Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch在Java中的几种API的使用,这块内容不作为面试中的重点。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威要向诸佬学

    2023年04月11日
    浏览(51)
  • RESTful:理解REST架构风格、RESTful API

    一、REST架构风格 REST(英文Representational State Transfer)是一种基于客户端和服务器的架构风格,用于构建可伸缩、可维护的Web服务。REST的核心思想是,将Web应用程序的功能作为资源来表示,使用统一的标识符(URI)来对这些资源进行操作,并通过HTTP协议(GET、POST、PUT、DELET

    2024年02月07日
    浏览(45)
  • Restful API

    REST 与技术无关,代表的是一种 软件架构风格 ,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”。 简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候, 使用HTTP协议中的4个请求方法代表4个不同的动作。 GET用来获取资源

    2024年02月05日
    浏览(51)
  • RESTful API 设计指南

    RESTful API 是目前比较成熟的一套互联网应用程序的API设计理论 API与用户的通信协议,总是使用HTTPs协议。 应用层协议 应该尽量将API部署在专用域名之下。并SSL 加密 应该将API的版本号放入URL。  另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用

    2024年02月07日
    浏览(40)
  • RESTful API 简介

    想必使用过 PHP、JSP 这一类服务器动态页面技术的程序员应该都还记得,在使用这种传统的动态页面架构构建应用程序的时候,用于描述用户界面的 HTML 页面通常都是在服务器上完成渲染的。在这种情况下,应用程序在客户端的 UI 通常是很难针对用户所使用的软硬件环境做出

    2024年02月07日
    浏览(49)
  • 什么是RESTful API

    RESTful API是利用HTTP请求访问或使用数据的应用程序接口(API)的体系结构样式。这些数据可用于GET,PUT,POST和DELETE数据类型,这些数据类型指的是与资源相关的操作读取、更新、创建和删除。 网站的API是允许两个软件程序相互通信的代码。API详细说明了开发人员编写从操作

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包