登录
原创

使用ES简单查询语句须知

发布于 2020-10-16 阅读 1056
  • Elasticsearch
原创

查询样例

{"query": {       //1
  "bool": {      ///2
	"must": [{      //3
		"query_string": {
			"default_field": "xxxz",
			"query": " *XXX* "
		}
	}],
	"should": [],    //4
	"must_not": [],    5
	"filter": [{      //6
		"range": {
			"l_last_ts": {
				"gte": 1579086000000,
				"lt": 1579172400000
			}
		}
	}, {
		"term": {
			"xxx": "123456"
		}
	}, {
		"term": {
			"xxx": "1234567"
		}
	}, {
		"exists": {
			"field": "xx"
		}
	}]
}
}
}

这条语句代表这利用Kibana从ES中查询,查询条件以 query标签开始,以bool查询形式插入条件,其中可以插入条件
must , must_not , should , should_not , filter等,must , must_not , should , should_not , 这些是查询条件是以单独一条的形式存在的,就是说,如果使用,must,则must这个语句块总只放一个单独的条件,在filter中,这个语句块中可以放多个条件,如 range ,
term , exists等,range 表示用来查询时间区间内的数据,一个term相当于一个条件查询,多个term 则是相当于 条件 and 条件
exists则是代表,ES索引中必须存在这个key。
上述语句相当于下列 java 代码:

 QueryBuilder queryBuilder  = QueryBuilders.boolQuery().
                    filter(QueryBuilders.rangeQuery(EsQueryConstant.L_LAST_TS).gte(1579086000000).lt(1579172400000)).
                    filter(QueryBuilders.termQuery("xxx", 123456)).
                    filter(QueryBuilders.termQuery("xxx", "1234567")).
                    filter(QueryBuilders.existQuery("xx")).
                    must(QueryBuilders.stringQuery("xxxz", "*" + "XXX" + "*"));

ES的查询语句必须满足JSON格式,查询语法DSL:
上述查询示例中,1是最外层必须格式,2代表着bool中的查询语句遵循着ES中的相似度评分查询规则,3代表着必须遵循的查询条件,这里还可以是mustnot,should,shouldnot,filter等,这里是非必须条件,可以不写bool,直接上条件,但必须遵循ES查询规则,3中可以包含多种条件,诸如match,multi_match等,3中也可以直接写term等条件(在老版本的ES中支持,新版本的ES中已经不支持这样的查询规则了),6表示着筛选条件,可以在其中设置筛选规则,其中可以包含term,range,exists,type等规则

term:精准字段匹配,如果在ES索引模板中未设置字段类型为.keyword的情况下直接使用这个进行字段查询,则可能出现匹配不到的情况,或者是匹配上多个相似的值,在设置了模板的情况下直接查询,就是进行精准字段查询

range:范围查询,和关系型数据库的 >=,<=一个意义

exist:判断文档是否存在这个key

type: 筛选与所提供的文档/映射类型匹配的文档。

其余的如 agg 等内容,下次再写吧

评论区

励志做一条安静的咸鱼,从此沉入鱼生海底。

0

0

0

举报