ElasticSearch中多種搜尋方式
阿新 • • 發佈:2018-12-28
1、query string search
搜尋全部:GET /index/type/_search
結果剖析:
"took" : 14, 耗時幾毫秒 "timed_out" : false, 是否超時,這裡沒有超時 "_shards" : { "total" : 5, 資料拆成了5個分片,所以對於搜尋請求,會達到所以的primary shard(或則是它的某個primary sha也可以) "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, 查詢結果的數量。3個document "max_score" : 1.0, score的含義:就是document對於一個search的相關度匹配的分數,分數越高,越相關就越匹配 "hits" : [ 包含了搜尋匹配的document的詳細資料
搜尋商品指定名稱,並且按照售價進行排序
格式:
GET /index/type/_search?q=name: 指定名稱 & sort= price:desc
2、query DSL:Domain Specified language:特定領域的語言
http reques body:請求體,可以用json的格式來構建語法,比較簡單,可以構建各種複雜的語法,比query string search強大
查詢所有商品:
GET /index/type/_search { "query":{ "match_all" :{} //match_all:匹配全文 } }
例子:
查詢名稱包含指定名稱的商品,同時售價按照降序排序 GET /index/type/_search { "query": { "match": { //match:只匹配一次 "name": "指定名稱" } }, "sort": [ { "price": "desc"} ] } 分頁查詢商品,總共3條資料,假設每頁顯示一條資料,現在顯示第二頁,查出兩條商品 GET /index/type/_search { "query": { "match_all": {} }, "from": 1, //從第幾條資料開始查 "size": 2 //顯示多少條資料 } 只查詢名稱和價格 GET /index/type/_search { "query": { "match_all": {} }, "_source": ["name","price"] }
3、query filter(對資料進行過濾)
包含指定商品名稱,而且價格大於30元的商品
GET /index/type/_search
{
"query": {
"bool": { //布林表示式
"must": { //必須匹配(這裡的意思是和指定商品,必須匹配)
"match":{
"name": "指定商品"
}
},
"filter": {
"range": { //區間範圍
"price": {"gt": 25}
}
}
}
}
}
4、full-text search(全文檢索)
GET /index/type/_search
{
"query": {
"match": {
"producer": "yagao producer"
}
}
}
5、phrase search(短語檢索)
跟全文檢索,完全相反,全文檢索會將輸入的搜尋串拆開來,然後在去索引裡面匹配,只要能匹配到任意一個拆解後的單詞,就可以作為結果返回
短語檢索,要求輸入的搜尋串,必須在指定的文字欄位中,必須完全一模一樣,才能被返回
GET /idnex /type/_search
{
"query": {
"match_phrase": {
"producer": "搜尋串" 要求和文字的欄位必須匹配或者文字中包含搜尋串則被返回
}
}
}
6、highlight search(高亮顯示)
搜尋指定商品名稱,並高亮顯示
GET /ecommerce/product/_search
{
"query": {
"match": {
"producer": "指定商品"
}
},
"highlight": {
"fields": {
"producer":{} //producer:只是一個欄位:也就是高亮的名稱在該欄位中包含
}
}
}