一、URI查询

(这里在kibana中可以自己用用,实际上,下文中的DSL查询语句作用会更大些)

通过在URI后面添加参数,实现一些简单条件的查询

  • q指定查询语句,使用Query String Syntax
  • df指定默认字段,不指定查询所有字段
  • sort排序/from和size用于分页
  • profile可以用来查看是如何被执行的
GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
{
"profile":true
}

指定字段、泛查询

GET /movies/_search?q=2012&df=title
{
"profile":"true"
} #泛查询,正对_all,所有字段
GET /movies/_search?q=2012
{
"profile":"true"
}

分组和phrase

分组查询需要使用(),将查询条件括起来,里面字段默认是or的关系,查出来的文档有其一个就会被查出来

phrase查询需要使用"",里面的关系是and,表示查出来的文档都拥有里面的词,并且按照词组的顺序排列

#分组查询
GET /movies/_search?q=title:(Beautiful Mind)
{
"profile":"true"
} #使用引号,Phrase查询
GET /movies/_search?q=title:"Beautiful Mind"
{
"profile":"true"
}

Bool条件

在term查询中添加指定bool条件

  • 使用大写AND/OR/NOT

  • &&/||/!

#分组,Bool查询默认是or的关系
GET /movies/_search?q=title:(Beautiful Mind)
{
"profile":"true"
} #布尔操作符
GET /movies/_search?q=title:(Beautiful AND Mind)
{
"profile":"true"
} GET /movies/_search?q=title:(Beautiful NOT Mind)
{
"profile":"true"
}

must条件

在term查询中可添加must和must_not条件

  • +表示must
  • -表述must_not
GET /movies/_search?q=title:(+Beautiful -Mind)

范围查询

  • []闭区间
  • {}开区间
#范围查询 ,区间写法
GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018]

通配符查询

  • ?代表一个字符,*代表0或多个
GET /movies/_search?q=title:(beautifu? AND y*)

正则表达式

GET /movies/_search?q=title:[bt]oy

模糊匹配与近似查询

GET /movies/_search?q=title:befutifl~1
GET /movies/_search?q=title:"lord rings"~2

二、RequestBody&DSL

DSL:Query Domain Search Language

ignore_unavailable

ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错

GET /movies,404_idx/_search?ignore_unavailable=true
{
"profile": true,
"query": {
"match_all": {}
}
}

profile

返回结果中添加此次查询分词等细节

GET /movies,404_idx/_search?ignore_unavailable=true
{
"profile": true,
"query": {
"match_all": {}
}
}

explain

返回每个文档结果中添加此次查询算分的细节

GET /movies,404_idx/_search?ignore_unavailable=true
{
"explain": true,
"query": {
"match_all": {}
}
}

query

查询条件

GET /movies,404_idx/_search?ignore_unavailable=true
{
"profile": true,
"query": {
"match_all": {}
}
}

from、size

分页,from:偏移量,size:每页大小

GET /kibana_sample_data_ecommerce/_search
{
"from":10,
"size":20,
"query":{
"match_all": {}
}
}

sort

#对日期排序
GET kibana_sample_data_ecommerce/_search
{
"sort":[{"order_date":"desc"}],
"query":{
"match_all": {}
} }

_source

用来过滤返回结果中需要显示的字段

GET kibana_sample_data_ecommerce/_search
{
"_source":["order_date"],
"query":{
"match_all": {}
}
}

script_fields

脚本字段,用来生产一个新的返回字段,生成规则写在script中

#脚本字段
GET kibana_sample_data_ecommerce/_search
{
"script_fields": {
"new_field": {
"script": {
"lang": "painless",
"source": "doc['order_date'].value+'hello'"
}
}
},
"query": {
"match_all": {}
}
}

match

匹配查询,如果此字段设置了分词,会分词查询

GET movies/_search
{
"query": {
"match": {
"title": "last christmas"
}
}
}
#operator可以修饰查询的条件
GET movies/_search
{
"query": {
"match": {
"title": {
"query": "last christmas",
"operator": "and"
}
}
}
}

match_phrase

短语查询,不会分词查询

GET movies/_search
{
"query": {
"match_phrase": {
"title":{
"query": "one love"
}
}
}
}
#slop参数可以设置查询短语的顺序,1代表单词移动一位还能和所查的短语匹配就命中
#one two love会被查出来
GET movies/_search
{
"query": {
"match_phrase": {
"title":{
"query": "one love",
"slop": 1
}
}
}
}

term

查询的字段不论是text还是keyword,不会将输入的文本进行分词处理

但是目标字段可能会被分词,所以会导致查不到想要的结果,此时建议用keyword类型的字段查询

#title的内容是"last christmas"
#如果title是text,那么会查不到
#如果title是keyword,会查到
GET movies/_search
{
"query": {
"trem": {
"title": "last christmas"
}
}
}

terms

查询字段内包含多个关键词的文档

GET movies/_search
{
"query": {
"trems": {
"title": ["last", "christmas"]
}
}
}

multi_match

一个字符串,在多个字段中查询

GET blogs/_search
{
"query": {
"multi_match": {
"type": "best_fields",
"query": "Quick pets",
"fields": ["title","body"],
"tie_breaker": 0.2,
"minimum_should_match": "20%"
}
}
} GET books/_search
{
"multi_match": {
"query": "Quick brown fox",
"fields": "*_title"
}
} GET books/_search
{
"multi_match": {
"query": "Quick brown fox",
"fields": [ "*_title", "chapter_title^2" ]
}
}

query String

实现多字符串,多字段查询

GET users/_search
{
"query": {
"query_string": {
"default_field": "name",
"query": "Ruan AND Yiming"
}
}
} GET users/_search
{
"query": {
"query_string": {
"fields":["name","about"],
"query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"
}
}
}

Simple query String

  • 类似Query String,但是会忽略错误的语法,同时只支持部分查询语法
  • 不支持 AND OR NOT 会当作字符串处理
  • Term之间默认的关系是OR,可以指定default_operate
  • 支持部分逻辑
    • +替代AND
    • |替代OR
    • -替代NOT
GET /movies/_search
{
"profile":true,
"query":{
"simple_query_string":{
"query":"Beautiful +mind",
"fields":["title"],
"default_operator": "AND"
}
}
} GET /movies/_search
{
"profile":true,
"query":{
"simple_query_string":{
"query":"Beautiful +mind",
"fields":["title"]
}
}
}

bool 查询

它是一种嵌套结构,里面可以嵌套上述各种查询逻辑,它本身包含三种逻辑结构。must、should、must_not

GET index /_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "Search"
}
},
{
"match": {
"content": "Elasticsearch"
}
}
],
"should": [
{
"term": {
"status": "published"
}
},
{
"range": {
"publish_date": {
"gte": "2015-01-01"
}
}
}
],
"must_not": [
{
"exists": {
"field":"value"
}
}
]
}
}
}

filter

给查询添加过滤条件,过滤结构化数据

  • 好处是可以把查询结果添加到缓存中
  • 还有一个作用是过滤的结果不会算分
GET index /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}

5.elasticsearch中查询条件的更多相关文章

  1. eas之EntityViewInfo对象mainQuery中查询条件

    EntityViewInfo对象mainQuery中查询条件:  添加查询字段:(Sql语句中的selectz子句内容)    SelecttorItemCollection sic=new Sele ...

  2. MongoDB官方C#驱动中查询条件Query用法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...

  3. jsp中查询条件的回显

    后台框架为ssh,前台纯手写无框架是最老的写法,因为是接手别人的项目无法改变框架原型,只能基于修改. 进入正题: 我这里查询条件有两种input的text(文本框)和select(下拉框). 1.te ...

  4. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

  5. sql通配符+sql中查询条件包含下划线等通配符的写法

    一.SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符. SQL 通配符必须与 LIKE 运算符一起使用. 在 SQL 中,可使用以下通配符: 通配符 描述 % 替代一个或多 ...

  6. sql中 查询条件出现单引号和特殊字符处理

    1.两个单引号转为一个单引号 example:  select * from tb where  name=' '' ' 2.如果出现 "_","%"  需要用 ...

  7. cookie应用——UI中查询条件的保存

    var cookieOperate = { cookieNames: { companyCNName:"_companyCNName", companyENName:"_ ...

  8. oracle中查询条件包含null时

    不能使用=null或者!=null 应该使用is null和is not null

  9. Logstash:把MySQL数据导入到Elasticsearch中

    Logstash:把MySQL数据导入到Elasticsearch中 前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我 ...

  10. ElasticSearch中的简单查询

    前言 最近修改项目,又看了下ElasticSearch中的搜索,所以简单整理一下其中的查询语句等.都是比较基础的.PS,好久没写博客了..大概就是因为懒吧.闲言少叙书归正传. 查询示例 http:// ...

随机推荐

  1. Solution -「洛谷 P6156」简单题

    Description Link. 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n(i+j)^kf(\gcd(i,j))\gcd(i,j)\). Solution ...

  2. Python 潮流周刊#21:如何提升及测量 Python 代码的性能?

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中三则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...

  3. Go 常用命令介绍

    Go 常用命令 目录 Go 常用命令 一.Go 常用命令 1.1 go build 1.1.1 指定输出目录 1.1.2 常用环境变量设置编译操作系统和 CPU 架构 1.1.3 查看支持的操作系统和 ...

  4. 【短道速滑十】非局部均值滤波的指令集优化和加速(针对5*5的搜索特例,可达到单核1080P灰度图 28ms/帧的速度)。

    非局部均值滤波(Non Local Means)作为三大最常提起来的去燥和滤波算法之一(双边滤波.非局部均值.BM3D),也是有着很多的论文作为研究和比较的对象,但是也是有着致命的缺点,速度慢,严重的 ...

  5. ModelScope

    欢迎来到ModelScope平台!本篇文章介绍如何快速开始使用ModelScope平台上的模型,包括所需的基础概念,环境安装,模型推理和训练的快速实践示例. 如何开始# 如果你是新手,想快速体验产品, ...

  6. MOOC慕课课表

    8. 教育法学,共11单元---课件全开放状态,可以1次全学完开课时间: 2020年08月17日 ~ 2020年12月16日进行至第1周,共18周学时安排: 3-5小时每周 9. 教师职业道德与教育政 ...

  7. 若依vue分离版(ruoyi-vue)跳过token验证,设置白名单

    找到SecurityConfig类的configure方法 如图所示 在设置白名单后还需要把接口上的权限标识符去掉.然后需要重启一下项目,热加载不行,会报错.

  8. 一文详解贝叶斯优化(Bayesian Optimization)原理

    参考资料: Expected Improvement formula for Bayesian Optimisation 通俗科普文:贝叶斯优化与SMBO.高斯过程回归.TPE 理解贝叶斯优化 A T ...

  9. form表单调接口校验 比如后台验证用户名是否存在

    <FormItem {...formItemLayout} label={'显示名'}> {getFieldDecorator('displayName', { initialValue: ...

  10. JAVA类的加载(4) ——类之间能够隔离&类占用的资源能回收

    一.类加载体系