term 不分词,匹配keyword类型
get /es_db/_search
{
"query":{
"term": {
"address": {
"value": "重庆"
}
}
}
}
|
query_string 组合关键字
get /es_db/_search
{
"query":{
"query_string":{
"query": "张三 OR 李四"
}
}
}
|
wildcard 通配符查询
GET twitter/_search
{
"query": {
"wildcard": {
"city.keyword": {
"value": "*海"
}
}
}
}
|
fuzzy 模糊查询
get /es_db/_search
{
"query":{
"fuzzy":{
"address":{
"value": "白云山",
"fuzziness": 1
}
}
}
}
|
- 允许不完全匹配,比如错别字,多字,少字
- fuzziness:设置误差范围,允许0-2之间
ids 单个索引,匹配多个id
get /twitter/_search
{
"query":{
"ids":{
"values":[1, 2]
}
}
}
|
multi_match 匹配多个字段
get /es_db/_search
{
"query":{
"multi_match":{
"query":"重庆",
"fields":["address", "name"]
}
}
}
|
|
|
match 拆词,匹配后按分数排序
get /es_db/_search
{
"query":{
"match": {
"address": "重庆市南岸区",
"operator": "and"
}
}
}
|
- 先对关键字进行分词,然后按分词进行查询
- 按匹配度从大到小排序
- 分词之前默认匹配关系为or
simple_query_string 简单版组合关键字
get /es_db/_search
{
"query":{
"simple_query_string":{
"query": "张三 + 李四"
}
}
}
|
range 范围查询
GET twitter/_search
{
"query": {
"range": {
"age": {
"gte": 30,
"lte": 40
}
}
}
}
|
match_phrase 严格匹配
get /es_db/_search
{
"query": {
"match_phrase":{
"address": "广州白云山"
}
}
}
|
根据id批量查询 (同时搜索多个索引)
get _mget
{
"docs":[
{"_index":"es_db", "_id":3},
{"_index":"article", "_id":1}
]
}
|
_msearch 同时搜索多个索引
get /_msearch
{"index":"es_db"}
{"query":{"match_all":{}}, "from":0, "size": 2}
{"index":"article"}
{"query":{"match":{"title":"fox"}}}
|
|
|
复合查询
must |
子句必须在文档中匹配。 正匹配有助于提高相关性分数。 |
should |
不强制要求必须匹配。 但是,如果匹配,相关性得分就会提高。 |
must_not |
条件不得与文档匹配。 该子句不会对分数做出贡献(它在过滤上下文执行上下文中运行) |
filter |
条件必须与文档匹配,类似于 must 子句。 该子句不会对分数做出贡献 (它在过滤上下文执行上下文中运行) |
bool 组合查询
POST _search
{
"query": {
"bool" : {
"must" : {
"term" : { "user" : "kimchy" }
},
"filter": {
"term" : { "tag" : "tech" }
},
"must_not" : {
"range" : {
"age" : { "gte" : 10, "lte" : 20 }
}
},
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
],
"minimum_should_match" : 1,
"boost" : 1.0
}
}
}
|
聚合
terms |
指定分组字段 |
range |
指定边界值进行分组,可以按数字,按日期 |
date_histogram |
按时间频率分组 |
filter |
指定过滤条件分组 |
terms 按字段分组
GET twitter/_search
{
"size": 0,
"aggs": {
"city": {
"terms": {
"field": "city",
"size": 10
}
}
}
}
|
多个filter分组统计,按filter分组
GET twitter/_search
{
"size": 0,
"aggs": {
"by_cities": {
"filters": {
"filters": {
"beijing": {
"match": {
"city": "北京"
}
},
"shanghai": {
"match": {
"city": "上海"
}
}
}
}
}
}
}
|
range 按给定边界值进行分组
GET twitter/_search
{
"size": 0,
"aggs": {
"age": {
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 22
},
...
]
}
}
}
}
|
cardinality 去重统计
GET twitter/_search
{
"size": 0,
"aggs": {
"number_of_cities": {
"cardinality": {
"field": "city"
}
}
}
}
|
|