1. 程式人生 > 程式設計 >Elasticsearch屬性單詞常用解析說明

Elasticsearch屬性單詞常用解析說明

一、前言

      說實話,剛測試ES的時候,我的內心是崩潰的,好多單詞都不知道代表什麼意思,只能一邊測試,一邊查詢。看到就趕緊記下來,一天下來,也算是學的七七八八吧。這裡分享給大家。

二、ES常見單詞解釋

1、url請求中的引數:

curl -XPOST 'localhost:9200/bank/type1/_search?pretty' -d '
{
"query": { "match_all": {} }
}'
(1)9200後面的bank是索引名字
(2)type1代表es的type,類似於傳統的table
(3)pretty:pretty是將返回的資訊以可讀的ON形式返回

2、_source欄位:

      這個欄位代表是否儲存在原始文件。如果設定為true,那麼查詢之後,會在hits.hits裡面有個_source陣列,展示原始文件。
_source可以限制儲存部分欄位,或者不儲存部分欄位,形如:

 "yourtype":{
   		 "_source":{
       		 "includes":["field1","field2"]   //這兩個欄位會儲存在原始文件
  		  },"properties": {
      		  ... 
   		 }
	}
 "yourtype":{
   		 "_source":{
       		 "excludes":["field1","field2"]  //這兩個欄位不會儲存在原始文件
  		  },"properties": {
      		  ... 
   		 }
	}

3、_all的配置:

      這個屬性的配置方法和_source類似,它是把一個文件裡面的所有資訊都放到一起組合成一個大欄位。我們可以設定這個欄位包含所有的欄位,也可以設定只包含幾個欄位,或者是隻儲存幾個欄位

(1)包含所有欄位

"yourtype": {
 	 "_all": {
     	"enabled": true  //這樣設定的話,就包含了所有的欄位
 	 },}

(2)包含或者不包含部分欄位

 "yourtype": {
      "properties": {
         "field1": {
             "type": "string","include_in_all": false   //這個欄位不包含在_all
          },"field2": {
             "type": "string","include_in_all": true  //這個欄位
包含在_all } } }

4、highlight 高亮顯示:

這個欄位類似於咱們百度的時候,符合預期文字的部分都會高亮顯示出紅色來

(1)可以在查詢時指定高亮欄位或者全部高亮

 "query": {
  		"match": {
    		 "_all": "中國人"
		  }
  },"highlight": {
 		 "fields": {
     		//"_all": {}    //這是對_all欄位進行高亮查詢
	//"title": {}  //這是對title欄位進行高亮顯示
	  }
  }

5、設定欄位的index屬性。

這個屬性是控制該欄位是否生成倒排索引,取值主要有三個:

(1)analyzed:欄位被索引,會做分詞,可搜尋。反過來,如果需要根據某個欄位進搜尋,index屬性就應該設定為analyzed。
(2)not_analyzed:欄位值不分http://www.cppcns.com詞,會被原樣寫入索引。反過來,如果某www.cppcns.com些欄位需要完全匹配,比如人名、地名,index屬性設定為not_analyzed為佳。
(3)no:欄位不寫入索引,當然也就不能搜尋。反過來,有些業務要求某些欄位不能被搜尋,那麼index屬性http://www.cppcns.com設定為no即可。

類似於:

(1)analyzed:欄位被索引,會做分詞,可搜尋。反過來,如果需要根據某個欄位進搜尋,index屬性就應該設定為analyzed。
(2)not_analyzed:欄位值不分詞,會被原樣寫入索引。反過來,如果某些欄位需要完全匹配,比如人名、地名,index屬性設定為not_analyzed為佳。
(3)no:欄位不寫入索引,當然也就不能搜尋。反過來,有些業務要求某些欄位不能被搜尋,那麼index屬性設定為no即可。

6、store屬性:

用於指定是否將原始欄位寫入索引,預設取值為no。

      因為在Lucene中,高亮功能和store屬性是否儲存息息相關,因為需要根據偏移位置到原始文件中找到關鍵字才能加上高亮的片段。在Elasticsearch,因為_source中已經儲存了一份原始文件,可以根據_source中的原始文件實現高亮,在索引中再儲存原始文件就多餘了,所以Elasticsearch預設是把store屬性設定為no。
注意: 如果想要對某個欄位實現高亮功能,_source和store至少保留一個。

參考:https://blog.csdn.net/mll1111/article/details/70598481

7、took :該請求花了多少毫秒 (took)

8、_shards:

      描述了查詢分片的資訊,查詢了多少個分片、成功的分片數量、失敗的分片數量等猜測這個欄位代表該次查詢,獲取資料經過的分片數量之和

9、hits:

搜尋的結果,total是全部的滿足的文件數目,hits是返回的實際數目(預設是10)

10、max_score和_score :

代表的是查詢結果的評分值,分越高,代表權重越大,排名越靠前。具體的參考:

https://blog.csdn.net/paditang/article/details/79098830

有的時候我們可能對分數不感興趣,就可以使用filter進行過濾,它不會去計算分值,因此效率也就更高一些

11、Routing:Elasticsearch的路由機制

      我們可以通過制定路由,而避免ES自己進行大量的廣播操作。直接按照我們制定的路由找到對應的分片查詢,關於路由機制,我們不做贅述,只是瞭解下就行。

具體請參考:https://blog.csdn.net/cnweike/article/details/38531997

12、term和trems:

這兩個是精準查詢,一個是單數,一次查詢單個值。一個是複數,一次查詢多個值。

例如:"terms" : {
    	"price" : [20,30]
	}

13、先看個語句:

	GET _search
{
  "query": {
    "filtered": {
      "query": {
        "match": {
          "text": "quick brown fox"
        }
      },"filter": {
        "term": {
          "status": "published"
        }
      }
    }
  }
}

(1) 這裡的"filtered": 從ES5.0之後被移除了。

(2) filter代表過濾匹配,也是為了過濾status欄位,讓它不去計算的分數,不用計算權重等。

新的語句為:

GET _search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "text": "quick brown fox"
        }
      },"filter": {
        "term": {
          "status": "published"
        }
      }
    }
  }
}

(3) bool代表的是bool查詢,引數主要有:

must
所有的語句都 必須(must) 匹配,與 AND 等價。
must_not
所有的語句都 不www.cppcns.com能(must not) 匹配,與 NOT 等價。
should
至少有一個語句要匹配,與 OR 等價

到此這篇關於Elasticsearch屬性單詞常用解析說明的文章就介紹到這了,更多相關Elasticsearch屬性單詞解析內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!