服务器上es简单的增删改查还是喜欢直接发curl,所以简单整理下
 

常踩小坑

1、url中有需转义的字符

如果url中的id中有特殊字符,需要进行转义,如#,需要转为%23,若id为wangergou#24,则url应转为

http://127.0.0.1:9200/user/user/wangergou%2324

2、curl的body部分的引号

注意单引号与双引号,单引号里的双引号不需要转义,双引号里的双引号是需要转义的

-d "{\"query\": {\"term\": {\"name\": \"zhangsan\"}}}"
或者
-d '{"query": {"term": {"name": "zhangsan"}}}'

 

一、查询

1、查看所有索引
# v 显示详细信息,pretty 以json形式展示

curl -i -XGET http://localhost:9200/_cat/indices?v

curl -i -XGET http://localhost:9200/_cat/indices?pretty
2、查询指定文档
# 查询user索引中包含zhang的文档(模糊)
curl -i -XGET http://localhost:9200/user/_search?q=zhang

# 查询user索引中包含name是zhangsan的文档(精确)
curl -X POST  http://localhost:9200/user/_search -d "{\"query\": {\"term\": {\"name\": \"zhangsan\"}}}" --header "Content-Type: application/json" 

不常用的复杂查询放在后面了

3、查看多条记录
# 默认只返回10条,加参数查看1-50条
curl -XPOST http://localhost:9200/user/_search?pretty -d "{\"from\": 0, \"size\": 50,\"query\":{\"match_all\":{}}}" --header "Content-Type: application/json"

 

二、增加

1、新增索引
curl -XPUT 'http://192.168.80.200:9200/address
2、增加某条记录
#向user索引中增加一条id为wangergou的记录

curl -X PUT http://127.0.0.1:9200/user/user/wangergou -d'{"name":"wangergou","age":24}' --header "Content-Type: application/json"

 

三、删除

1、删除索引
#删除索引user
curl -i -XDELETE http://127.0.0.1:9200/user

#删除多个索引
curl -i -XDELETE http://127.0.0.1:9200/user,history

#通配符删除索引
curl -i -XDELETE http://localhost:9200/test*

#删除所有索引
curl -i -XDELETE http://127.0.0.1:9200/_all
2、删除指定记录
#删除user索引中name是zhangsan的记录

curl -X POST http://127.0.0.1:9200/user/user/_delete_by_query  -d'{"query":{"match":{"name" :"zhanagsan"}}}' --header "Content-Type: application/json"

 

四、更新

1、更新指定文档
# 更新指定文档的zhangsan的age字段为26
curl -XPOST http://127.0.0.1:9200/user/user/zhangsan/_update -d '{"doc" : {"age":26}}' --header "Content-Type: application/json"

 

五、查看集群状态

1、查看集群健康状态
curl -i -XGET http://localhost:9200/_cat/health?v
2、查询集群统计信息
curl -i -XGET http:/localhost:9200/_cluster/stats

 

六、复杂查询

1、模糊查询

下面为curl的body部分

#所有firstname字段为Virginia或者Ayala的所有文档
{
  "query": {
    "match": { # 普通搜索
      "firstname": {
        "query": "virginia jones", # 搜索的关键词
        "operator": "or"           # 操作: or and
      }
    }
  }
}

#所有address字段包涵 Virginia Ayala的所有文档
{
  "query": {
    "match_phrase": { # 词组搜索
      "address": "Baycliff Terrace"
    }
  }
}

#字段address,firstanme,lastname中含有 Baycliff 或者 Terrace 的所有文档
{
  "query": {
    "multi_match": { # 多字段词组搜索
      "query": "Baycliff Terrace", 
      "fields": ["address", "firstname", "lastname"]
    }
  }
}

match在匹配时会对所查找的关键词进行分词,然后按分词匹配查找,而term会直接对关键词进行查找。一般模糊查找的时候,多用match,而精确查找时可以使用term

2、精确查询
{
    'query':{
        'terms':{
            'tag':["search",'nosql','hello']
        }
    }
}
3、bool查询

bool查询包含四个子句,must,filter,should,must_not

{
    'query':{
        'bool':{
            'must':[{
                'term':{
                    '_type':{
                        'value':'age'
                    }
                }
             },{
                 'term':{
                     'account_grade':{
                         'value':'23'
                     }
                 }
             }
           ]      
        }
    }
    
}

{
	"bool":{
            "must":{
                "term":{"user":"lucy"}
            },
            "filter":{
                "term":{"tag":"teach"}	
            },
            "should":[
              	{"term":{"tag":"wow"}},
                {"term":{"tag":"elasticsearch"}}
            ],
           	"mininum_should_match":1,
           	"boost":1.0  		            
        }
}

4、filter查询

query和filter的区别:query查询的时候,会先比较查询条件,然后计算分值,最后返回文档结果;而filter是先判断是否满足查询条件,如果不满足会缓存查询结果(记录该文档不满足结果),满足的话,就直接缓存结果

filter快在:对结果进行缓存,避免计算分值

{
    "query": {
      "bool": {
        "must": [
          {"match_all": {}}
        ],
        "filter": {
          "range": {
            "create_admin_id": {
              "gte": 10,
              "lte": 20
            }
          }
        }
      }
    }
}

5、range查询
{
	'query':{
    	'range':{
            'age':{
                'gte':'30',
                'lte':'20'
            }
    	}
	}
}

6、通配符查询
{
    'query':{
        'wildcard':{
            'title':'cr?me'
        }
    }    
}
7、正则表达式查询
{
    'query':{
        'regex':{
            'title':{
                'value':'cr.m[ae]',
                'boost':10.0
            }
        }
    }
}
8、前缀查询
{
    'query':{
        'match_phrase_prefix':{
            'title':{
                'query':'crime punish',
                'slop':1
            }
        }
    }
}

 
参考链接:
https://blog.miuyun.work/archives/12283770
 
如有错误,烦请指出,感谢~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐