ES 简单使用
约 562 字大约 2 分钟
2024-09-07
创建/修改
创建/修改 _doc修改为替换
- ID存在修改 不存在创建
- POST不带ID为创建
- PUT必须带ID
PUT /index/_doc/ID # ID存在修改 不存在创建
POST /index/_doc/ID # ID存在修改 不存在创建
POST /index/_doc # 创建
POST /index/_create/ID # 没有创建 存在报错PUT /accout/_doc/1
{
"name":"zhangsan",
"age":18,
"commpany":{
"name":"google",
"address":"beijing"
}
}部分更新
使用 /index/_doc/ID 会替换数据
POST /accout/_update/ID
{
"doc": {
"age":20 # 没有创建 有修改
}
}查询
GET /_cat/indices # 查看所有index
GET /index # 查看index的基本信息
GET /index/_doc/ID # 通过ID查询删除数据
DELETE /index/_doc/ID # 删除一条数据
DELETE /index # 删除index批量操作
POST _bulk _index可以不一样 失败不会中断
POST _bulk
{ "index": {"_index": "accout", "_id": "1"} } # 存在更新 不存在创建
{ "age": 20}
{ "create": {"_index": "accout", "_id": "2"} } # 存在会报错
{ "age": 21}
{ "update": {"_index": "accout", "_id": "3"} } # 部分更新
{ "doc": { "age": "12"}}
{ "delete": {"_index": "accout", "_id": "4"} }批量获取
GET /_mget
GET /_mget
{
"docs" :[
{
"_index":"accout",
"_id":"1"
},
{
"_index":"accout",
"_id":"2"
}
]
}搜索
- url搜索
- request body查询 match: 会进行分词 term: 不会进行分词
# match查询 分词
GET accout/_search
{
"query": {
"match": {
"name": "zhang san"
}
}
}
# match_phrase查询 分词且顺序要求一样
GET accout/_search
{
"query": {
"match_phrase": {
"name": "zhang san"
}
}
}
# multi_match查询
GET accout/_search
{
"query": {
"multi_match": {
"query": "apple",
"fields": ["name", "commpany.name"]
}
}
}
# query_string查询
GET accout/_search
{
"query": {
"query_string": {
"default_field": "name", # 不写在所有字段中搜索
"query": "app OR apple" # AND OR 必须大写
}
}
}
# match all查询
GET accout/_search
{
"query": {
"match_all": {}
}
}
# term查询 不会进行分词
GET accout/_search
{
"query": {
"term": {
"name": {
"value": "zhang san"
}
}
}
}
# range查询 - 范围查询
GET accout/_search
{
"query": {
"range": {
"age": {
"gte": 15,
"lte": 18
}
}
}
}
# exists查询 判断是否存在
GET accout/_search
{
"query": {
"exists": {
"field": "age"
}
}
}
# fuzzy模糊查询
GET accout/_search
{
"query": {
"match": {
"name": {
"query": "appl",
"fuzziness": 1
}
}
}
}
GET accout/_search
{
"query": {
"fuzzy": {
"name": {
"value": "appl"
}
}
}
}
# 复合查询
# must: 必须满足must子句的条件,并且参与计算分值
# filter: 必须满足filter子句的条件。但是不会像Must一样,参与计算分值
# should: 可能满足should子句的条件,参与计算分值。
# must_not: 必须不满足must_not定义的条件
# 在一个bool查询中,如果没有must或者filter,有一个或者多个should子句,那么只要满足一个就可以返回
GET accout/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
],
"must_not": [
{
"match": {
"name": "apple"
}
}
]
}
}
}