• <button id="eiyoe"><acronym id="eiyoe"></acronym></button>
    <em id="eiyoe"></em>

  • <rp id="eiyoe"><acronym id="eiyoe"><input id="eiyoe"></input></acronym></rp>
      查看: 117|回復: 0
      上一主題 下一主題

      Elasticsearch屬性單詞常用解析說明

      79910

      主題

      0

      好友

      積分

      離線 發信

      跳轉到指定樓層
      樓主
      發表于 2021-09-16 07:37 | 只看該作者 | 倒序瀏覽

      一、前言

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

      二、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是將返回的信息以可讀的JSON形式返回
      

      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:字段值不分詞,會被原樣寫入索引。反過來,如果某些字段需要完全匹配,比如人名、地名,index屬性設置為not_analyzed為佳。
      (3)no:字段不寫入索引,當然也就不能搜索。反過來,有些業務要求某些字段不能被搜索,那么index屬性設置為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/mlljava1111/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
      所有的語句都 不能(must not) 匹配,與 NOT 等價。
      should
      至少有一個語句要匹配,與 OR 等價
      

      到此這篇關于Elasticsearch屬性單詞常用解析說明的文章就介紹到這了,更多相關Elasticsearch屬性單詞解析內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

      來源:http://www.jb51.net/article/219256.htm