ES常用查询

132 阅读2分钟

ES-DDL

索引库备份:POST http://ip:port/_reindex

  "source": {
    "index": "medical_record_code"
  },
  "dest": {
    "index": "medical_record_code_bak"
  }
}

索引库创建:PUT http://ip:port/index_name

{
  "mappings" : {
    "properties" : {
      "name": {
          "type": "keyword"
        },
        "id": {
          "type": "keyword"
        }
    }
  }
}

索引库删除:DEL

。。。

索引库添加索引字段:POST:http://ip:port/zhouls2/mappings

            "properties": {
                "content": {
                    "type": "text",
                    "analyzer": "ik_smart",
                    "search_analyzer": "ik_smart"
                }
            }
}

ES-DML

ES数据全部删除:POST http://ip:port/zhouls2/_delete_by_query

{
  "query": { 
    "match_all": {
    }
  }
}

ES插叙所有索引库:GET http://ip:port/_cat/indices

ES-term查询:POST http://ip:port/medical_record_code/_search

    "query" : {  
                "bool" : {  
                    "must" : [  
                        { "terms" : {"id" : ["53741008"]}}
                    ] 
                }     
    } 
}

// 多字段
{
    "query": {
        "term": {
          "id": "34",
          "name":"2-01"
         }
    }
   }

ES聚合查询-分桶-脚本:POST http://ip:port/medical_record_code/_search

    "size":0,
   "aggs": {
     "gp": {
       "terms": {
        "script": "doc.patient_id.value +'#'+doc.medical_record_id.value",
        //返回100分组数据份数据
        "size":1000
       }
     }
 }
 }

ES批量插入-JSON:POST http://ip:port/索引库/_bulk

binary *.josn文件

ES分词查询:POST http://ip:port/索引库/_search

    "query": {
        "query_string": {
            "query": "有限公司",
            "fields": ["content"]
        }
    }
}

ES分词测试:POST http://ip:port/_analyze

{"text": "美国留给伊拉克的是一个烂摊子吗?","analyzer": "ik_max_word"}

ES查询所有索引详细结构数据:GET http://ip:port/index1,index2,index3...

ES统计查询: GET http://ip:port/index/_count

{
     "query": {
         "match":{
             "字段":字段值
         }
     }
}
}

ES聚合统计:POST http://ip:port/index/_search

{
	"size": 0,
	"aggs": {
		"count": { //名字随便起,聚合查询的名字
			"value_count": { //聚合查询的类型
				"field":"字段名" // 计算这个字段的总数;或者是script脚本:"script": "doc.sourceId +'#'+doc.destinationId"
			}
		}
	}
}


// 聚合+查询条件

{
	"query": {
		"match": {
			"active": true
		}
	},
	"size": 0,
	"aggs": {
		"gp": {
			"terms": {
				"script": "doc.sourceId +'#'+doc.destinationId",
                //返回100分组数据份数据
				"size": 1
			}
		}
	}
}

// 聚合distinct

{
    "query": {
         "match":{
             "active":true
         }
     },
    "size":0,
    "aggs": {
        "count":{
            "cardinality":{
                 "script": "doc.sourceId +'#'+doc.destinationId"
            }
        }
    }
}

ES相似查询探索

第一种 匹配查询,得分都一样,排序估计是按存储顺序排的(和MySQL like查询不一样)

GET http://ip:port/index/_search

{
  "query": { 
    "wildcard": { "term" : "心脏病*"} 
  }
}

第二种 分成字 and逻辑就是包含三个字 根据每个字计算得分 得到一个总分

GET http://ip:port/index/_search

{
    "query" : {
        "match": {
            "termFolded" :  {
              "query": "糖尿病",
              "operator": "and"
            }
        }
    }
}

第三种 类似MySQL的like查询,根据词进行匹配,并计算得分

GET http://ip:port/index/_search

{
  "query": { 
    "bool": {
      "must": [
        {
          "match_phrase": { 
              "termFolded": "糖尿病"
            } 
          
        }
      ]
    }
  }
}