Elasticsearch提供了一個可以執行查詢的Json風格的DSL(domain-specific language領域特定語言)。這個被稱爲Query DSL,該查詢語言非常全面,並且剛開始的時候感覺有點複雜,真正學好它的方法是從一些基礎的示例開始的。
{
QUERY_NAME:{
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
{
QUERY_NAME:{
FIELD_NAME:{
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
{
"query":{
"match all":{}:
},
"from":0,
"size":5,
"sort":[
{
"account number": {
"order": "desc"
}
}
]
}
-
query定義如何查詢,
-
match-all查詢類型【代表查詢所有的所有】,es中可以在query中組合非常多的查詢類型完成複雜查詢
-
除了query參數之外,我們也可以傳遞其它的參數以改變查詢結果。如sort,size
-
from-size限定,完成分頁功能
-
sort排序,多字段排序,會在前序字段相等時後續字段內部排序,否則以前序爲準
2)、返回部分字段
{
"query":{
"match all":{}:
},
"sort":[
{
"account number": {
"order": "desc"
}
}
],
"from":0,
"size":5,
"_source":["age","balance"]
}
3)、match【匹配查詢】
GET bank/_search
{
"query": {
"match": {
"account_number": "20"
}
}
}
match返回account_number=20的
GET bank/_search
{
"query": {
"match": {
"address": "mill"
}
}
}
最終查詢出address中包含mill單詞的所有記錄
match當搜索字符串類型的時候,會進行全文檢索,並且每條記錄有相關性得分
GET bank/_search
{
"query": {
"match": {
"address": "mill load"
}
}
}
最終查詢出address中包含mill或者road或者millroad的所有記錄,並給出相關性得分
4)、match_phrase【短語匹配】
將需要匹配的值當成一個整體單詞(不分詞)進行檢素
GET bank/_search
{
"query": {
"match_phrase": {
"address": "mill road"
}
}
}
查出address中包含millroad的所有記錄,並給出相關性得分
5)、multi_match【多字段匹配】
GET bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["state","address"]
}
}
}
state或者address包含mill
6)、bool【複合查詢】
bool用來做複合查詢:複合語句可以合併任何其它查詢語句,包括複合語句,瞭解這一點是很重要的。這就意味
GET bank/_search
{
"query": {
"bool": {
"must": [
{"match": {
"gender": "M"
}},
{"match": {
"address": "mill"
}}
],
"must_not": [
{"match": {
"age": "18"
}}
],
"should": [
{"match": {
"lastname": "Wallace"
}}
]
}
}
}
7)、filter【過濾查詢】
GET bank/_search
{
"query": {
"bool": {
"filter": {
"range": {
"age": {
"gte": 18,
"lte": 30
}
}
}
}
}
}
可以達到和must,must not,should相同的結果,但是沒有相關性得分
8)、term
和match一樣。匹配某個屬性的值。全文檢索字段用match,其他非text字段匹配用term