簡(jiǎn)單查詢
按id查詢單條記錄
GET bank/_doc/1
查詢所有數(shù)據(jù)
- 默認(rèn)只查詢10條記錄
GET bank/_search
{
"query": {
"match_all": {}
}
}
- 設(shè)置分頁(yè)條件
GET bank/_search
{
"query": {
# 無(wú)條件查詢
"match_all": {}
},
# 偏移量,從第一條開(kāi)始查
"from": 0,
# 記錄條數(shù)
"size": 1000
}
設(shè)置排序
兩種設(shè)置方式
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"字段名": "asc"
},
{
"字段名": {
"order": "desc/asc"
}
}
]
}
注意:_id 為字符串,其排序方式為按位比較,并非數(shù)值大小
filter 過(guò)濾
在 bool 查詢內(nèi),可以使用 filter 對(duì)數(shù)據(jù)進(jìn)行過(guò)濾。
單從最終數(shù)據(jù)來(lái)看,filter 也是用于過(guò)濾數(shù)據(jù),用于條件查詢。
不同點(diǎn)在于,filter 查詢的結(jié)果不進(jìn)行評(píng)分,但也不影響bool查詢內(nèi)其他查詢的評(píng)分結(jié)果。
# 查詢 age = 10 & province = 600 的數(shù)據(jù)
# 使用 filter 過(guò)濾,filter 僅過(guò)濾數(shù)據(jù),而不進(jìn)行評(píng)分,當(dāng)然也不影響 使用 query 內(nèi)其他查詢的評(píng)分結(jié)果
GET /stu/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "address",
"query": {
"term": {
"address.province": {
"value": "600"
}
}
}
}
}
],
"filter": [
{
"term": {
"age": 10
}
}
]
}
}
}
查詢數(shù)組內(nèi)的值查詢
ES沒(méi)有數(shù)組一說(shuō),對(duì)數(shù)組值的查詢就像普通值那樣查詢即可。
數(shù)組內(nèi)其中一項(xiàng)匹配就算成功
terms:在多個(gè)條件值里面匹配,匹配上一個(gè)就算成功。
term:只能傳一個(gè)條件值,不分詞的字段值 或者 數(shù)組內(nèi)某項(xiàng)字段值 或者 字段分詞后的詞典 匹配上這個(gè)值就算成功。
直接匹配數(shù)組字段,只要匹配上數(shù)組內(nèi)任一項(xiàng)(或者關(guān)系)就算成功;
如果要同時(shí)匹配數(shù)組內(nèi)多個(gè)值,可以使用bool must 對(duì)多個(gè)值進(jìn)行(與關(guān)系匹配)
# 查詢 hobbies 包含 swimming 或者 music 的數(shù)據(jù)
GET /stu/_search
{
"query": {
"terms": {
"hobbies": [
"movie",
"music"
]
}
}
}
可以查到以下數(shù)據(jù)
{
"_index" : "stu",
"_type" : "_doc",
"_id" : "jjoE7YgBKFUjhQBi3mz1",
"_score" : 1.0,
"_source" : {
"id" : 2,
"name" : "李四",
"age" : 20,
"hobbies" : [
"music",
"speaking",
"drive"
],
"address" : [
{
"province" : "500",
"city" : "025",
"county" : "1993"
},
{
"province" : "502",
"city" : "027",
"county" : "1999"
}
]
}
},
{
"_index" : "stu",
"_type" : "_doc",
"_id" : "jzoE7YgBKFUjhQBi_2zu",
"_score" : 1.0,
"_source" : {
"id" : 3,
"name" : "張三四",
"age" : 30,
"hobbies" : [
"movie",
"book",
"swimming"
],
"address" : [
{
"province" : "600",
"city" : "021",
"county" : "1887"
},
{
"province" : "601",
"city" : "073",
"county" : "1953"
}
]
}
}
嵌套查詢
有時(shí),我們查詢的條件字段不在最外層;此時(shí)需要使用嵌套查詢
- 如果多個(gè)條件是在一個(gè) nested 字段內(nèi),則可以在netsted 內(nèi)的query 中使用 bool 查詢
- 如果多個(gè)條件不在同一個(gè) nested 字段內(nèi),則在外層query中使用 bool 查詢
查詢一個(gè)外層條件字段 內(nèi)的嵌套字段
GET xxx_index/_search
{
"query": {
# 嵌套查詢,其他字段該怎么查怎么查,如果還有不屬于這個(gè)嵌套字段的其他條件,依然使用 bool ,處理
"nested": {
"path": "外層字段名",
# 基于這個(gè)path,當(dāng)前的層級(jí),再寫(xiě)一個(gè) 普通的query
"query": {
"bool": {
# 多條件
"must": [
{
"term": {
"外層字段名.內(nèi)層字段名1": 條件值1
}
},
{
"match_phrase": {
"外層字段名.內(nèi)層字段名2": 條件值2
}
}
]
}
}
}
}
}
查詢多個(gè)條件,其中有嵌套字段
# 一個(gè)嵌套字段 & 一個(gè)普通字段
GET xxx_index/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "外層字段名1",
"query": {
"term": {
"外層字段名1.內(nèi)層字段名1": 條件值1
}
}
}
},
{
"match": {
"外層字段名2": " 條件值2"
}
}
]
}
}
}
如果還有,其他外層字段,依舊在 外層 bool 里面加條件。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-773201.html
自定義查詢字段
返回指定字段
{
"_source": [
"字段名",
"字段名.屬性名",
"字段名.*"
],
"query": {
xxxx
}
}
或文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-773201.html
{
"_source": {
"includes": [
"字段名",
"字段名.屬性名",
"字段名.*"
]
},
"query": {
xxx
}
}
不顯示字段
{
"_source": false,
"query": {
xxxx
}
}
排除指定字段
{
"_source": {
"exclude": [
"字段名",
"字段名.屬性名",
"字段名.*"
]
},
"query": {
xxxx
}
}
到了這里,關(guān)于Elasticsearch 基本使用(二)簡(jiǎn)單查詢 & 嵌套查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!