【ES】学习3-请求体查询

1.空查询

GET /index_2014*/type1,type2/_search
{}
GET /_search
{
  "from": 30,
  "size": 10
}

2.查询表达式

DSL只需将查询语句传递给 query 参数

GET /_search
{
    "query": YOUR_QUERY_HERE
}

查询全部 match_all 跟空查询等价

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

针对某个字段,结构

{
    QUERY_NAME: {
        FIELD_NAME: {
            ARGUMENT: VALUE,
            ARGUMENT: VALUE,...
        }
    }
}
GET /_search
{
    "query": {
        "match": {
            "tweet": "elasticsearch"
        }
    }
}

3.查询与过滤

查询:一个评分的匹配,计算相似度

过滤:一个不评分的匹配,只有是或否。过滤的性能更好。

4.重要字段

match_all:匹配所有

{ "match_all": {}}

match:全文匹配或精确匹配

{ "match": { "tweet": "About Search" }}
{ "match": { "age":    26           }}
{ "match": { "date":   "2014-09-01" }}
{ "match": { "public": true         }}
{ "match": { "tag":    "full_text"  }}

multi_match:在多个字段上执行相同的match查询

{
    "multi_match": {
        "query":    "full text search",
        "fields":   [ "title", "body" ]
    }
}

range:找出那些落在指定区间内的数字或者时间

{
    "range": {
        "age": {
            "gte":  20,
            "lt":   30
        }
    }
}

term:用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些not_analyzed 的字符串

{ "term": { "age":    26           }}
{ "term": { "date":   "2014-09-01" }}
{ "term": { "public": true         }}
{ "term": { "tag":    "full_text"  }}

terms:和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件

{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}

exists:查找指定字段中有值的文档

{
    "exists":   {
        "field":    "title"
    }
}

missing:查找指定字段中无值的文档

5.组合多查询

bool:将多查询组合在一起。它支持参数:

  must:文档 必须 匹配这些条件才能被包含进来。

  must_not:文档 必须不 匹配这些条件才能被包含进来。

  should:如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。

  filter:必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }}
        }
    }
}
{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "bool": {
              "must": [
                  { "range": { "date": { "gte": "2014-01-01" }}},
                  { "range": { "price": { "lte": 29.99 }}}
              ],
              "must_not": [
                  { "term": { "category": "ebooks" }}
              ]
          }
        }
    }
}

constant_score查询:

它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下。可以使用它来取代只有 filter 语句的 bool 查询。

{
    "constant_score":   {
        "filter": {
            "term": { "category": "ebooks" }
        }
    }
}

6. 验证查询

_validate, explain:判断查询是否合法以及原因。

GET /gb/tweet/_validate/query?explain
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}
时间: 2024-10-10 06:04:30

【ES】学习3-请求体查询的相关文章

ElasticSearch(七)--请求体查询

简单查询lite search (字符串查询)是一种有效的命令行ad hoc 查询,但是想要善用搜索,必须使用请求体查询request  body search API.之所以这么称呼,是因为大多数的参数以JSON格式所容纳,而不是查询字符串. 请求体查询不但可以处理查询,而且还可以高亮返回结果中的片段. 1.空查询 GET _search {} 同字符串查询一样,你可以查询一个,或多个索引及类型 GET /index_2014*/type1,type2/_search {} 也可以使用from

新章节——请求体搜索(full body search)

轻量级的搜索--?query string search?--对命令行的即席查询来说是十分有用的.然而为了驾驭搜索的强大功能,你应该使用带请求体的search API,之所以这样,是因为很多的参数是在JSON的请求体中的而不是查询字符串. 请求体查询--从现在开始就是"search"--不仅仅自身处理查询,而且允许你高亮结果片段,也可以对结果集进行合并和分析,也能返回did-you-mean?suggestions这样的提示,帮助提示你的用户快速找到更好的结果. 原文:http://w

Django中获取参数(路径,查询,请求头,请求体)

一.通常HTTP协议向服务器传参有几种途径 : 提取URL的特定部分,如/weather/shanghai/2018,可以在服务器端的路由中用正则表达式截取: 查询字符串(query string),形如key1=value1&key2=value2: 请求体(body)中发送的数据,比如表单数据.json.xml: 在http报文的头(header)中. 1.URL中参数的获取 在定义路由URL时,可以使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图

Es学习第六课, ES基本搜索_search

前面几课ES的基本概念.安装和分词都讲过了,下面我们就来实战一下ES的核心功能-搜索,这节课我们主要讲的是基本搜索 _search(注意:ES的关键字都要加前缀_,所以我们在定义索引.类型名称时不要带_). 我们先通过kibana插入几条三个文档 PUT /customer/doc/1?pretty { "name": "John Doe" } POST /customer/doc/ { "title": "My second blog

DICOM医学图像处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求

背景: 上一篇专栏博文中针对PACS终端(或设备终端,如CT设备)与RIS系统之间worklist查询进行了介绍,并着重对比分析了DICOM3.0中各部分对DICOM网络通讯服务的定义.此次通过结合早些时间的博文DICOM医学图像处理:基于DCMTK工具包学习和分析worklist,对DCMTK开源库中提供的storescp.exe和storescu.exe工具的源码进行剖析,从底层深入了解C-STORE服务的触发及响应. 分析思路: storescp.exe和storescu.exe分别充当着

Es+kafka搭建日志存储查询系统(设计)

现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es).Logstash.Kibana上个项目结合.Es就是基于Lucene的存储,索引的搜索引擎:logstash是提供输入输出及转化处理插件的日志标准化管道:Kibana提供可视化和查询统计的用户界面.往往这些开源项目并不是适合每一个公司的业务,业务不同,对开源项目扩展也就不同,logstash进行

SolrCloud的Java客户端请求体过大导致的400错误

由于业务原因,Solr客户端发起的查询请求体数据太多,默认采用get方式超过 tomcat maxHttpHeaderSize. 方案: 增加 tomcat maxHttpHeaderSize 到32k,默认8k 修改solr客户端默认提交方式post maxBooleanClauses 建议1-5000

HTTP 请求头与请求体 - 某熊的全栈之路 - SegmentFault

本文从属于笔者的HTTP 理解与实践系列文章,对于HTTP的学习主要包含HTTP 基础.HTTP 请求头与请求体.HTTP 响应头与状态码.HTTP 缓存这四个部分,而对于HTTP相关的扩展与引申,我们还需要了解HTTPS 理解与实践.HTTP/2 基础.WebSocket 基础这些部分.本部分知识点同时也归纳于笔者的我的校招准备之路:从Web前端到服务端应用架构这篇综述. HTTP Request HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典型的请求消息头域,如下

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但