1-# 各机构上报所有病例
GET rdr_inpat_front_medical_records/_search
{
"size": 0,
"aggs": {
"org_Code": {
"terms": {
"field": "DE08_10_052_00.keyword"
}
}
}
}
2-#嵌套类型利用脚本衍生新字段
GET rdr_inpat_nested_patient/_search
{
"size":10,
"script_fields": {
"change_age_field": {
"script": {
"lang": "painless",
"source": "params['_source']['inpat_front_medical_records'].length"
}
},
"test":{
"script": {
"lang":"painless",
"source":"doc['SEX.keyword']+'aa'"
}
}
},
"_source":{
"includes":["fixedNo","SEX","birthday","dqmc_empi_visit.age"]
}
}
3-# 统计每份病例下的诊断条数
GET /rdr_inpat_nested/_search
{
"size":0,
"query":{
"bool":{
"filter":[]
}
},
"aggregations":{
"DE01_00_014_00.keyword":{
"terms":{
"field":"DE01_00_014_00.keyword",
"size":1000,
"missing":"#NULL"
},
"aggregations":{
"diagnosis_aggs": {
"nested": {
"path": "inpat_diagnosis"
},
"aggregations": {
"min_pkId": {
"value_count": {
"field": "inpat_diagnosis.PK_ID"
}
}
}
}
}
}
}
}
4-ES使用painless脚本获取时分秒
POST _scripts/ConvertStringToDate
{
"script": {
"lang": "painless",
"source": """
String fname = params.filedName;
if(fname==null)
{
return -1;
}
String type = params.type;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(
"'date:' yyyy/MM/dd 'time:' HH:mm:ss");
ZonedDateTime zdt = ZonedDateTime.parse(fname, dtf);
if(type!=null)
{
if(type=="year")
{
int year = zdt.getYear();
return year;
}
if(type=="month")
{
int month = zdt.getMonthValue();
return month;
}
if(type=="day")
{
int day = zdt.getDayOfMonth();
return day;
}
if(type=="hour")
{
int hour = zdt.getHour();
return hour;
}
if(type=="minute")
{
int minutes = zdt.getMinute();
return minutes;
}
if(type=="second")
{
int seconds = zdt.getSecond();
return seconds;
}
}
return zdt;
"""
}
}
5-Es使用painless脚本转化类型
POST _scripts/ConvertStringToInt
{
"script": {
"lang": "painless",
"source": """
String type = params.type;
String fname = params.filedName;
try{
String fileValue= String.valueOf(doc[fname].value);
double iValue = Double.parseDouble(fileValue);
return iValue;
}catch (Exception e){
return 0;
}
"""
}
}
5-Es使用painless脚本时间年月转数字
String fieldType = params.fieldType;
String fname = params.filedName;
if("date"==fieldType){Calendar c = Calendar.getInstance();JodaCompatibleZonedDateTime dateTime= doc[fname].value;c.setTime(Date.from(dateTime.toInstant()));int day=c.get(Calendar.DATE);int month = c.get(Calendar.MONTH);int iValue = month*100+day;
return iValue;}else{
int year = Integer.parseInt(doc[fname].value.substring(0, 4));
int month = Integer.parseInt(doc[fname].value.substring(5, 7));
int day = Integer.parseInt(doc[fname].value.substring(8, 10));
int iValue = month*100+day;
return iValue;
}
6-Es 写入数据时利用脚本计算新变量(设置管道pipeLine)
IndexRequest request= new IndexRequest(indexName, "doc",fixedNo ).source(map);
for(String s:scriptList)
{
request.setPipeline(s);//设置脚本管道
}
7-MYSQL类型与elasticsearch类型对照
static String getMysqlToEsType(String type)
{
String esType="text";
switch (type.toLowerCase())
{
case "tinyint":
case "mediumint":
case "smallint":
case "int":
esType="integer";
break;
case "decimal":
case "double":
esType="double";
break;
case "char":
case "varchar":
case "longtext":
case "text":
case "mediumtext":
case "tinytext":
esType="text";
break;
case "blob":
case "binary":
esType="binary";
break;
case "date":
case "datetime":
case "timestamp":
case "time":
esType="date";
break;
default:
esType="text";
}
return esType;
}
