ElasticSearch7.0+常用查询Json访问大全

操作版本基于7.0

涉及的查询关键字预览

  • sort
  • includes、excludes
  • stored_fields
  • script_fields
  • _count
  • term,terms,terms_set
  • range
  • exits
  • prefix
  • wildcard
  • regexp
  • match
  • multi_match
  • match_phrase,match_phrase_prefix
  • query_string

1、分页查询
索引项有一个 index.max_result_window的配置项,默认为10000,如果分页查询的是10000条以后的数据需要修改这个配置项的值。实际中没有必要查询这么靠后的数据,可以增加检索条件获取有价值的信息。

GET students/_search
{
  "from":100,
  "size":20,
  "query":{
     "term":{
       "age":5
        }
    }
}

2、sort 查询结果排序

POST /students/_search
{
  "sort":[
    "name",
    { "address":"asc"}
 ]
}

3、_source 查询原始文档中包含字段的数据

//查询包含tom的数据
POST /students/_search
{
  "_source":"tom",
  "query":{
     "match_all":{}
  }
}

//查询包含jiayi和17的数据
POST /students/_search
{
  "_source":["jiayi",17],
}

//通配符匹配
POST /students/_search
{
  "_source":"*jerry"
}

4、includes、excludes 查询包含和不包含

POST /students/_search
{
  "_source":{
    "includes":["tom.*","*.jerry"],
    "excludes":"beijing.*"
}

5、stored_fields 查询字段显示在结果中
前提是nameaddress必须设置了 “store”:true

POST /students/_search
{
  “store_fields”:["name","address"]
}

6、script_fields 查询结果添加运算后的字段
计算每天平均费用

POST /order/_search
{
  "script_fields":{
     "price_per_day":{
       "script":{
         "source":doc['price'].value/doc['day'].value
      }
  }
}

7、_count 查询符合条件的文档数量

POST /students/_count
{
  "query":{
     "match":{
        "address":"Beijing"
         }
    }
}

8、term 查询
精确匹配,相当于SQL语句中的 where

POST /students/_search
{
  "query":{
     "term":{
       "age":18
    }
  }
}

9、terms查询
范围匹配,类型SQL语句的 in 操作符

POST /students/_search
{
  "query":{
     "terms":{
       "address":["Beijing","Hongkong"]
    }
  }
}

10、terms 多索引联查
相当于SQL中的多表联查.
查询ID为1的学生提交的所有家庭作业

POST /homework/_search
{
  "query":{
     "terms":{
      "_id":{
           "_index":"students",
           "id":1,
           "path":"homework"
        }
    }
  }
}

11、terms_set 字段数组查询
只要查询结果包含所指定的词项即可,minimum_should_match_script设置了最小包含词项的数量

POST /students/_search
{
  "query":{
     "terms_set":{
      "tags":{
           "terms":["Beijing","HongKong","WuHan"],
           "minimum_should_match_script":{
                "source":2
            }      
      }     
    }
  }
}

12、range 范围查询
年龄介于 100到200之间的

POST /students/_search
{
  "query":{
    "range":{
      "age":{
        "gte":100,
        "lte":200
        }
     }
   }
}
//
gte  大于等于
gt  大于
lte  小于等于
lt  小于

13、exits 检索字段值不为空
查询地址不为空的学生

POST /students/_search
{
  "query":{
     "exits":{
      "fields":"address"
    }
  }
}

14、prefix 检索包含指定前缀的文档
查询所有姓“张”的学生

POST /students/_search
{
 "query":{
     "prefix":{
       "name":"张"
    }
  }
}

15、wildcard 通配符查询
wildcard允许使用 *?* 代表多个字符, ? 代表单个字符。例如f*f?x匹配firefox,将检索所有已f开头并以f?x结尾的词项

POST /order/_search
{
   "query":{
     "wildcard":{
       "message":"f*f?x"
    }
  }
}

16、regexp 正则查询
15的案例可以这样写。regexp正则使用的是Lucence表达式,所以不支持JAVA预定义的 \w、\d

POST /order/_search
{
   "query":{
     "wildcard":{
       "message":"f*f.x"
    }
  }
}

17、match、operator 查询
查询message字段都包含firefox和chrome的记录。operator可选值有 orand(默认为or)。匹配个数可以通过 minimum_should_match来修改

POST /order/_search
{
  "query":{
   "match":{
     "message":{
           "query":"firefox chrome",
           "operator":"and"
          }
       }
    }
}

18、multi_match 查询
在订单表的message或title字段里查询包含“口罩”的记录

POST /order/_search
{
 "query":{
     "multi_match":{
       "query":"口罩",
       "fields":["message","title"]   
    }
  }
}

19、match_phrase 短语匹配
ES会把“西安市雁塔区”拆解成“西安市”和“雁塔区”两个词项,然后在message字段检索这两个的组合,当出现的前后顺序差值为1才符合条件。

POST /order/_search
{
  "query":{
     "match_phrase":{
       "message":"西安市雁塔区"
    }
  }
}

20、match_phrase_prefix 前缀匹配
当我们在京东输入Iphone时,会自动显示出“Iphone11”、“Iphone11 Pro”、“Iphone 12”…没错,这个方法可以实现

POST /order/_search
{
  "query":{
     "match_phrase":{
       "name":"Iphone"
    }
  }
}

21、query_string 查询字符串
1、default_field默认查询全部字段
2、query里的OR必须大写,不然会被识别成词项。也可使用AND

POST /order/_search
{
  "query":{
     "query_string":{
       "default_field":"message",
       "query":"(Iphone11)OR(XIAOMI10)"
    }
  }
}

21、simple_query_string
针对20用例做了简化,取消了default_field字段
常用简化操作符如下:

操作符flags说明
+AND逻辑与
IOR逻辑或
-NOT逻辑非,用在某个词项前表示不包含这个项
"PHRASE短语查询
*PREFIX前缀查询,用在词项后面
POST /order/_search
{
  "query":{
     "simple_query_string":{
       "field":["message"],
       "query":"(Iphone11) | (XIAOMI10)"
    }
  }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值