1、term 过滤

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经切词的文本数据类型):

{ "term": { "date":   "2017-07-01" }}
{ "term": { "title":    "内蒙古"  }}

完整的例子, hostname 字段完全匹配成 saaap.wangpos.com 的数据:

{
  "query": {
    "term": {
      "title": "内蒙古"
    }
  }
}

2、terms 过滤

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:

{
    "terms": {"title": [  "内蒙古",  "黑龙江"  ] }
}

完整的例子,所有文章标题是 内蒙古 或黑龙江的 的,

{
  "query": {
    "terms": {
      "title": [
        "内蒙古",
        "黑龙江"
      ]
    }
  }
}

3、range 过滤

range过滤允许我们按照指定范围查找一批数据:

{
    "range": {
      "pubTime": {
        "gt": "2017-06-25",
        "lt": "2017-07-01"
      }
    }
  }

范围操作符包含:

gt :: 大于
gte:: 大于等于
lt :: 小于
lte:: 小于等于
一个完整的例子, 查询发表时间在2017-06-25和2017-07-01之间的数据

{
  "query": {
    "range": {
      "pubTime": {
        "gt": "2017-06-25",
        "lt": "2017-07-01"
      }
    }
  }
}

4、exists 和 missing 过滤

exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件.

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

这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。

5、bool 过滤

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:

must :: 多个查询条件的完全匹配,相当于 and。
must_not :: 多个查询条件的相反匹配,相当于 not。
should :: 至少有一个查询条件匹配, 相当于 or。
这些参数可以分别继承一个过滤条件或者一个过滤条件的数组:

{
    "bool": {
        "must":     { "term": { "folder": "inbox" }},
        "must_not": { "term": { "tag":    "spam"  }},
        "should": [
                    { "term": { "starred": true   }},
                    { "term": { "unread":  true   }}
        ]
    }
}

6、match_all 查询

可以查询到所有文档,是没有查询条件下的默认语句。

{
    "match_all": {}
}

此查询常用于合并过滤条件。 比如说你需要检索所有的邮箱,所有的文档相关性都是相同的,所以得到的_score为1.

7、match 查询
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。

如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符:

{
  "query": {
    "match": {
      "content": "韩国 上海 北京"
    }
  }
}

如果用match下指定了一个确切值,在遇到数字,日期,布尔值或者not_analyzed 的字符串时,它将为你搜索你给定的值:

{ "match": { "age": 12}}
{ "match": { "pubTime":   "2017-07-01" }}
{ "match": { "title":    "韩国"  }}

提示: 做精确匹配搜索时,你最好用过滤语句,因为过滤语句可以缓存数据。

match查询只能就指定某个确切字段某个确切的值进行搜索,而你要做的就是为它指定正确的字段名以避免语法错误。

8、multi_match 查询

multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个:

{
  "query": {
    "multi_match": {
      "query": "乌鲁木齐",
      "fields": [
        "title",
        "content"
      ]
    }
  }
}

查询文章标题和内容包含乌鲁木齐的数据

9、bool 查询

bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功, 而bool 查询要计算每一个查询子句的 _score (相关性分值)。

must:: 查询指定文档一定要被包含。
must_not:: 查询指定文档一定不要被包含。
should:: 查询指定文档,有则可以为文档相关性加分。
以下查询将会找到 title 字段中包含 "how to make millions",并且 "tag" 字段没有被标为 spam。 如果有标识为 "starred" 或者发布日期为2014年之前,

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }},
            { "range": { "date": { "gte": "2014-01-01" }}}
        ]
    }
}

提示: 如果bool 查询下没有must子句,那至少应该有一个should子句。但是 如果有must子句,那么没有should子句也可以进行查询。

10、wildcards 查询

使用标准的shell通配符查询

以下查询能够匹配包含W1F 7HW和W2F 8HW的文档:

{
    "query": {
        "wildcard": {
            "postcode": "W?F*HW"
        }
    }
}

又比如下面查询 hostname 匹配下面shell通配符的:

{
  "query": {
    "wildcard": {
      "title": "乌鲁*"
    }
  }
}

11、regexp 查询

假设您只想匹配以W开头,紧跟着数字的邮政编码。使用regexp查询能够让你写下更复杂的模式:

GET /my_index/address/_search
{
    "query": {
        "regexp": {
            "postcode": "W[0-9].+"
        }
    }
}

这个正则表达式的规定了词条需要以W开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。

下面例子是所有以 wxopen 开头的正则

{
  "query": {
    "regexp": {
      "hostname": "wxopen.*"
    }
  }
}

12、prefix 查询
以什么字符开头的,可以更简单地用 prefix,如下面的例子:

{
  "query": {
    "prefix": {
      "title": "屠杀"
    }
  }
}

13、短语匹配(Phrase Matching)

当你需要寻找邻近的几个单词时,你会使用match_phrase查询:
{
  "query": {
    "match_phrase": {
      "content": "端午 旅游 云南"
    }
  }
}

和match查询类似,match_phrase查询首先解析查询字符串来产生一个词条列表。然后会搜索所有的词条,
但只保留含有了所有搜索词条的文档,并且词条的位置要邻接。

match_phrase查询也可以写成类型为phrase的match查询:

{
  "query": {
    "match": {
      "content": {
        "query": "端午 旅游 云南",
        "type": "phrase"
      }
    }
  }
}

实战ELK(7)ElasticSearch常用的基本查询语句的更多相关文章

  1. WordPress 常用数据库SQL查询语句大全

    在使用WordPress的过程中,我们少不了要对数据库进行修改操作,比如,更换域名.修改附件目录.批量修改文章内容等等.这个时候,使用SQL查询语句可以大大简化我们的工作量. 关于如何操作SQL查询语 ...

  2. ELK:ElasticSearch中有数据,Kibana查询不到数据

    ElasticSearch中有数据,Kibana查询不到数据 多数原因就是Linux的时区问题, 在linux输入date查看当前时间是否根本地相对应,不对应那么你就来对了, 解决方案一. 这个选择的 ...

  3. 转:oralce常用操作、查询语句(查看表空间)

    http://highill.iteye.com/blog/1534858 最近整理一下oralce的常用语句,借此记录一下,在网上都应该能搜到,这里主要是整理分享. 一.操作语句 建立表空间 MYD ...

  4. ElasticSearch:常用的基础查询与过滤器

    match_all(获取所有索引文档) quert_string(获取包含指定关键字文档) 默认查询_all字段,_all字段是由所有字段组合而成的,可以通过description:关键字,获取通过请 ...

  5. 一些常用的SQL查询语句

    学习网站:http://www.w3cschool.cc/sql/sql-tutorial.html 一:查询所有表的属性 SELECT 'ALTER TABLE '+ CASE WHEN O.sch ...

  6. ORACLE EBS常用表及查询语句(最终整理版)

    建议去看参考二 参考一:                                                              call fnd_global.APPS_INITI ...

  7. oracle常用的数据字典查询语句

    select * from all_source where owner='user_name' and type = 'PROCEDURE' and upper(text) like upper(' ...

  8. MySQL常用表结构查询语句

    在我们使用数据库进行查询或者建表时,经常需要查看表结构,下面以employees数据库中的departments表为例进行表结构查询: departments表:(2列9行) +---------+- ...

  9. ElasticSearch 7.X版本19个常用的查询语句

    整理一篇常用的CRUD查询语句,之前这篇文件是在17年左右发表的,从英文翻译过来,现在采用7.x 版本进行实验,弃用的功能或者参数,我这边会进行更新,一起来学习吧. 为了演示不同类型的 Elastic ...

随机推荐

  1. Backpack VI

    Given an integer array nums with all positive numbers and no duplicates, find the number of possible ...

  2. caffe matlab matcaffe 加载输入网络net时报错

    http://blog.csdn.net/xiaojiajia007/article/details/72850247

  3. jq demo 简单的图片懒加载效果

    重点:在元素进入可视区域后,把图片元素的 _src 的值,赋值给 src <!DOCTYPE HTML> <html> <head> <meta http-e ...

  4. svn提示文件 is already locked

    有时候在提交代码或者更新代码的时候svn会报错误,提示请执行"clean up",但是有时候执行"clean up"也没有什么用,不过当执行"clea ...

  5. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  6. PyCharm基本用法

    1.修改字体 在file->settings下进行修改如下图: 2 修改颜色背景 在file->settings下修改,如图: 3连接git 点击file->settings,选择版 ...

  7. python基础之centos6.5 升级 python2.7, 安装pip, MySQLdb

    这个仅仅是为了运行脚本需求, 将centos6.5中的 python 2.6.6升级到了 2.7 并且安装和了 pip 和 MySQLdb 1.先装依赖 yum install zlib-devel ...

  8. mod_conference ESL控制三(程序)

    第一篇描述了mod_conference控制原理,第二篇描述了conference相关事件,接下来对esl内联程序做简要说明. 由于event-socket采用TCP协议,因此需要一个线程与frees ...

  9. 行高(line-height)

    line-height属性 设置元素中文本行高.

  10. Python全栈之路----函数----局部变量

    全局变量是定义在函数外部以及代码的变量,全局能用. 局部变量就是定义在函数里的变量,只能在局部生效. 在函数内部,可以引用全局变量. 如果全局和局部都有一个名字相同的变量,在函数内会优先调用函数内的局 ...