Skip to content

Es 使用

create

PUT /<index>

delete

PUT /<index>

查看

查看所有

GET /_cat/indices

查看指定

GET /_cat/indices/<index>

_doc

创建

post

POST /<index>/_doc

  • api params
JSON
{
    // 文档内容
}

put

put方式需指定id

PUT /<index>/_doc/<id>

修改

put

PUT /<index>/_doc/<id>

同put方式创建,put方式修改,会覆盖掉原的所有字段, 如只想修改某个字段的值, 该方式则不能满足

post

  • POST /<index>/_doc/<id>

该方式与put相同,会覆盖掉原的字段

  • POST /<index>/_update/<id>
  • params
JSON
{
    "doc": {
        // 需要修改的数据
    }
}

该方式只会修改指定的字段, 不会覆盖所有字段

删除

delete

DELETE /<index>/_doc/<id>

查询

请求方式

  • GET /<index>/_search
  • GET /_search
  • POST /<index>/_search
  • POST /_search

常用查询参数

查询参数,有地址传递请求体(body)传递两种方式,此处只介绍body方式

  • query

    • 查询条件
  • from

    • 偏移量,默认为0
  • size

    • 每页条数限制
  • _source需要查询返回的字段

  • sort

    • 排序

复合查询条件

bool

基于布尔条件的匹配查询, 基于一个或多个布尔条件构建, 可能出现的类型有:

类型描述
must查询结果必须全部符合查询条件,并给查询结果计算分值, 每个子条件的关系相当于AND
must_not与must查询的结果相反,相当于NOT, 与must不同,分数将会被省略
should查询结果符合任意一个查询条件即可, 相当于OR
filter结果必须符合全部与must不同点是忽略分数
  • must

以下语句,只会搜索出 name:3333, sex:female的用户, 并计算分值

JSON
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "3333"
                    }
                },
                {
                    "match": {
                        "sex": "female"
                    }
                }
            ]
        }
    },
    "_source": [
        "scores.*",
        "name"
    ]
}
  • filter (不计算分值)
JSON
{
    "query": {
        "bool": {
            "filter": [
                {
                    "match": {
                        "name": "3333"
                    }
                },
                {
                    "match": {
                        "sex": "female"
                    }
                }
            ]
        }
    }
}
  • should

搜索name:乌拉或者sex:female, 计算分值

JSON
GET /search/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "乌拉"
          }
        },
        {
          "match": {
            "sex": "female"
          }
        }
      ]
    }
  }
}
  • must_not

搜索name!=乌拉并且sex!=female的数据, 计算分值

JSON
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match": {
                        "name": "乌拉"
                    }
                },
                {
                    "match": {
                        "sex": "female"
                    }
                }
            ]
        }
    }
}
  • 多种条件复合使用

搜索sex:male并且name:3333 或者name:乌拉的数据.

以下两种写法皆可实现, 注意嵌套写法的层级关系

JSON
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "sex": "male"
                    }
                },
                {
                    "match": {
                        "name": "乌拉 3333"
                        // 多个关键词空格分隔
                    }
                }
            ]
        }
    }
}
JSON
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "sex": "male"
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match": {
                                    "name": "3333"
                                }
                            },
                            {
                                "match": {
                                    "name": "乌拉"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

boostring

constant_score

dis_max

function_score

query_string 方式查询

使用query_string拼接查询条件, 注意AND|OR的大小写形式

JSON
{
    "query": {
        "bool": {
            "must": [
                {
                    "query_string": {
                        "query": "sex:male AND ( name:3333 OR name:乌拉)"
                    }
                }
            ]
        }
    }
}

全文查询

match 全文检索

返回与关键词(文本,数字,日期,布尔)匹配的文档,

JSON
{
    "query": {
        "match": {
            "name": "乌拉"
        }
    }
}

match_phase 处理分词

term 词条查询

查找包含指定字段中精确匹配查询字符串的文档。

  • exists 返回包含指定字段的文档
Plaintext
GET /search/_search
{
    "query": {
        "exists": {
            "field": "name"
        }
    }
}
  • ids 根据ids查询文档
JSON
{
    "query": {
        "ids": {
            "values": [
                1,
                2
            ]
        }
    }
}
  • range 根据数据范围查询文档
JSON
{
    "query": {
        "range": {
            "scores.math": {
                "lt": 80
            }
        }
    }
}
  • term 根据词条准确查找(价格,id…)

不要使用termtext字段进行查询, 要搜索text字段,是用match查询

JSON
{
    "query": {
        "term": {
            "sex": {
                "value": "male"
            }
        }
    }
}
  • terms 根据多个词条进行精确查找
JSON
{
  "query": {
    "terms": {
      "scores.math": ["60", "120"]
    }
  }
}
  • wildcard通配符查询
JSON
{
  "query": {
    "wildcard": {
      "name": {
        "value": "*拉"
      }
    }
  }
}
  • 关键词准确搜索
JSON
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name.keyword": {
              "value": "乌拉"
            }
          }
        }
      ]
    }
  }
}