1. 程式人生 > >ElasticSearch中多種搜尋方式

ElasticSearch中多種搜尋方式

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:只是一個欄位:也就是高亮的名稱在該欄位中包含
    }
  }
}