ElasticSearch第十一篇:常用DSL查询语法

一:Filter DSL

1.term 过滤(精确匹配) 

term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型)

DSL:

{
    "query" : {
        "term" : {
            "picParentId" : "15020400114"
        }
    }
}

2.terms 过滤(多条件精确匹配)

terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配

DSL:

{
    "query" : {
        "terms" : {
            "id" : ["1","2","3","4","5"]
        }
    }
}

3.range 过滤(范围查找)

range过滤允许我们按照指定范围查找一批数据,范围操作符包含:

    gt : 大于 

    gte: 大于等于

    lt : 小于

    lte: 小于等于

DSL:

{
    "query" : {
        "range" : {
            "time" : { 
        		"gte" : 1561795200000,
        		"lt"  : 1562174761211
        	} 
        }
    }
}

4.bool 过滤(合并多个过滤条件查询结果)

bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含以下操作符:

    must : 多个查询条件的完全匹配,相当于 and。

    must_not : 多个查询条件的相反匹配,相当于 not。

    should : 至少有一个查询条件匹配, 相当于 or。

这些参数可以分别继承一个过滤条件或者一个过滤条件的数组:

DSL:

{
    "query" : {
        "bool": {
        	"must":     { "term": { "id": "177" }},
        	"must_not": { "term": { "cphm": ""}},
        	"should": [
                    { "term": { "picParentId": "150204000013"   }},
                    { "term": { "time":  1562231879869   }}
        	]
    	}
    }
}

 

5.exists 和 missing 过滤(是否包含指定字段或没有某个字段)

exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件.

这两个过滤只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。

DSL:

{
    "query" : {
	    "exists":   {
	        "field": "cphm" 
	    } 
    }
}

 

二:Query DSL

1.match_all 查询

可以查询到所有文档,是没有查询条件下的默认语句

DSL:

{
    "query":{"match_all":{}},
    "sort":[
        {
             "time":"desc"
       }
   ]
}

2.match 查询

指定某个确切字段某个确切的值进行搜索

DSL:

{
    "query" : {
        "match" : {
            "picParentId" : "15020400001320000"
        }
    }
}

3.multi_match 查询

multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个条件

DSL:

{
    "query" : {
        "multi_match" : {
        	"query": "黑色",
        	"fields": [ "syys", "kzys" ]
        }
    }
}

4.bool 查询

bool 查询与 bool 过滤相似,用于合并多个查询子句。不同的是,bool 过滤可以直接给出是否匹配成功, 而bool 查询要计算每一个查询子句的 _score (相关性分值)。

    must : 查询指定文档一定要被包含。

    must_not : 查询指定文档一定不要被包含。

    should : 查询指定文档,有则可以为文档相关性加分。

DSL:

{
    "query" : {
        "bool": {
        	"must":     { "match": { "id": "177" }},
        	"must_not": { "match": { "cphm": ""}},
        	"should": [
                    { "match": { "picParentId": "1502040160303325"   }},
                    { "match": { "time":  1562231879869   }}
        	]
    	}
    }
}

 

你可能感兴趣的:(ElasticSearch第十一篇:常用DSL查询语法)