lasticsearch查詢模式
一種是像傳遞URL參數一樣去傳遞查詢語句,被稱為簡單查詢
GET /library/books/_search //查詢index為library,type為books的全部內容 GET /library/books/_search?q=price:10 //查詢index為library,type為books中price等於10的
另一種是DSL語句來進行查詢,被稱為DSL查詢,term和match就屬於DSL
term查詢
term是代表完全匹配,即不進行分詞器分析,文檔中必須包含整個搜索的詞匯
格式
GET /library/books/_search #這里是變化的,指定index和type;(比如說index為library,type為books)
{
"query": {
"term": {
"key": "value" #這里是變化的,比如說查詢title等於elasticsearch的內容
}
}
}
實例1:查詢index為library,type為books重title等於elasticsearch的內容
GET /library/books/_search
{
"query": {
"term": {
"title": "elasticsearch"
}
}
}
match查詢
match和term的區別是,match查詢的時候,elasticsearch會根據你給定的字段提供合適的分析器,而term查詢不會有分析器分析的過程
match查詢相當於模糊匹配,只包含其中一部分關鍵詞就行
格式
GET /library/books/_search
{
"query":{
"match":{
"key":"value"
}
}
}
實例1:過濾出preview字段中包含"elasticsearch"的索引,並且只顯示preview和title字段
GET /library/books/_search
{
"fields":["preview","title"]
"query":{
"match":{
"preview":"elasticsearch"
}
}
}
match_all查詢
查詢指定索引下的所有文檔
實例1:過濾出index為library,type為books的所有文檔
GET /library/books/_search
{
"query":{
"match_all":{}
}
}
實例2:通過match_all過濾出所有字段,然后通過partial在過濾出包含preview的字段和排除title,price的字段
GET /library/books/_search
{
"partial_fields":{
"partial":{
"include":["preview"], #包含preview字段的文檔
"exclude":["title,price"] #排除title,price字段
},
"query":{
"match_all":[]
}
}
}
match_phrase查詢
短語查詢,slop定義的是關鍵詞之間隔多少未知單詞
格式
GET /library/books/_search
{
"query":{
"match_phrase" :{
"query":"Elasticsearch,distributed",
"slop":2 #表示Elasticsearch和distributed之間隔多少單詞
}
}
}
multi_match查詢
可以指定多個字段
實例1:查詢title和preview這兩個字段都包含Elasticsearch關鍵詞的文檔
GET /library/books/_search
{
"query":{
"multi_match":{
"query":"Elasticsearch"
"fields":["title","preview"]
}
}
}
filter過濾查詢
查詢同時,通過filter條件在不影響打分的情況下篩選出想要的數據
簡單的filter查詢
實例1:先查詢index為library,type為books的全部文檔;再過濾price等於20的
GET /store/products/_search
{
"query": {
"filtered":{
"query":{
"match_all": {} #先查詢index為store,type
},
"filter": {
"term" :{
"price":20 #這里是條件,price等於20的
}
}
}
}
}
filter之bool過濾查詢
格式
{
"bool":{
"must" : [],
"should" : [],
"must_not" : [],
}
}
#must:條件必須滿足,相當於sql語句的and
#should:條件可以滿足也可以不滿足,相當於sql語句的or
#must_not:條件不需要滿足,相當於sql語句的not
實例1:查詢價格等於20或者productID等於SD1002136的商品,再排除價格等於30的
GET /store/products/_search
{
"query": {
"filtered":{
"filter":{
"bool":{
"should": [
{"term" : {"price" : 20}},
{"term" : {"productID" : "SD1002136"}}
],
"must_not": {
"term" :{"price":30}
}
}
}
}
}
}
filter之and,not,or查詢
沒有bool,也可以直接使用and,or,not
實例1:and用法,查詢價格是10元並且productID又是SD1002136的結果
GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"and":[
{
"term":{
"price":10
}
},
{
"term":{
"productID":"SD1002136"
}
}
]
},
"query":{
"match_all": {}
}
}
}
}
實例2:or用法,查詢價格是10元或者productID是SD4535233的商品
GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"or":[
{
"term":{
"price":10
}
},
{
"term":{
"productID":"SD4535233"
}
}
]
},
"query":{
"match_all":{}
}
}
}
}
實例3:not用法,查詢productID不是SD1002136的商品
GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"not":{
"term":{
"productID":"SD1002136"
}
}
},
"query":{
"match_all": {}
}
}
}
}
filter之range范圍查詢
格式
GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"range":{
"key":{
"條件" : value1
"條件": value2
}
}
}
}
}
}
條件
gt : 大於 lt : 小於 gte : 大於等於 lte :小於等於
實例1:查詢price大於等於20小於等於40的結果
GET /store/products/_search
{
"query":{
"filtered":{
"filter":{
"range":{
"price":{
"gte" : 20,
"lte" : 40
}
}
}
}
}
}

