600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java中使用es精准查询_使用ES简单查询语句须知

java中使用es精准查询_使用ES简单查询语句须知

时间:2024-02-07 22:27:48

相关推荐

java中使用es精准查询_使用ES简单查询语句须知

查询样例

{"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 等内容,下次再写吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。