服务器上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
如有错误,烦请指出,感谢~