elasticsearch之查詢的兩種方式
阿新 • • 發佈:2020-12-07
前言
簡單的沒挑戰,來點複雜的,比如檢視來自顧家的都有哪些人怎麼查呢?elasticsearch提供兩種查詢方式:
- 查詢字串(query string),簡單查詢,就像是像傳遞URL引數一樣去傳遞查詢語句,被稱為簡單搜尋或查詢字串(query string)搜尋。
- 另外一種是通過DSL語句來進行查詢,被稱為DSL查詢(Query DSL),DSL是Elasticsearch提供的一種豐富且靈活的查詢語言,該語言以json請求體的形式出現,通過restful請求與Elasticsearch進行互動。
準備資料
PUT zhifou/doc/1 { "name":"顧老二", "age":30, "from": "gu", "desc": "面板黑、武器長、性格直", "tags": ["黑", "長", "直"] } PUT zhifou/doc/2 { "name":"大娘子", "age":18, "from":"sheng", "desc":"膚白貌美,嬌憨可愛", "tags":["白", "富","美"] } PUT zhifou/doc/3 { "name":"龍套偏房", "age":22, "from":"gu", "desc":"mmp,沒怎麼看,不知道怎麼形容", "tags":["造資料", "真","難"] } PUT zhifou/doc/4 { "name":"石頭", "age":29, "from":"gu", "desc":"粗中有細,狐假虎威", "tags":["粗", "大","猛"] } PUT zhifou/doc/5 { "name":"魏行首", "age":25, "from":"廣雲臺", "desc":"彷彿兮若輕雲之蔽月,飄飄兮若流風之迴雪,mmp,最後竟然沒有嫁給顧老二!", "tags":["閉月","羞花"] }
查詢字串
GET zhifou/doc/_search?q=from:gu
還是使用GET
命令,通過_serarch
from
屬性是gu
家的人都有哪些。最後,別忘了_search
和from
屬性中間的英文分隔符?
。
結果如下:
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 0.6931472, "hits" : [ { "_index" : "zhifou", "_type" : "doc", "_id" : "4", "_score" : 0.6931472, "_source" : { "name" : "石頭", "age" : 29, "from" : "gu", "desc" : "粗中有細,狐假虎威", "tags" : [ "粗", "大", "猛" ] } }, { "_index" : "zhifou", "_type" : "doc", "_id" : "1", "_score" : 0.2876821, "_source" : { "name" : "顧老二", "age" : 30, "from" : "gu", "desc" : "面板黑、武器長、性格直", "tags" : [ "黑", "長", "直" ] } }, { "_index" : "zhifou", "_type" : "doc", "_id" : "3", "_score" : 0.2876821, "_source" : { "name" : "龍套偏房", "age" : 22, "from" : "gu", "desc" : "mmp,沒怎麼看,不知道怎麼形容", "tags" : [ "造資料", "真", "難" ] } } ] } }
我們來重點說下hits
,hits
是返回的結果集——所有from
屬性為gu
的結果集。重點中的重點是_score
得分,得分是什麼呢?根據演算法算出跟查詢條件的匹配度,匹配度高得分就高。後面再說這個演算法是怎麼回事。
結構化查詢
我們現在使用DSL方式,來完成剛才的查詢,檢視來自顧家的都有哪些人。
GET zhifou/doc/_search { "query": { "match": { "from": "gu" } } }
上例,查詢條件是一步步構建出來的,將查詢條件新增到match
中即可,而match
則是查詢所有from
欄位的值中含有gu
的結果就會返回。
當然結果沒啥變化:
{ "took" : 0, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 0.6931472, "hits" : [ { "_index" : "zhifou", "_type" : "doc", "_id" : "4", "_score" : 0.6931472, "_source" : { "name" : "石頭", "age" : 29, "from" : "gu", "desc" : "粗中有細,狐假虎威", "tags" : [ "粗", "大", "猛" ] } }, { "_index" : "zhifou", "_type" : "doc", "_id" : "1", "_score" : 0.2876821, "_source" : { "name" : "顧老二", "age" : 30, "from" : "gu", "desc" : "面板黑、武器長、性格直", "tags" : [ "黑", "長", "直" ] } }, { "_index" : "zhifou", "_type" : "doc", "_id" : "3", "_score" : 0.2876821, "_source" : { "name" : "龍套偏房", "age" : 22, "from" : "gu", "desc" : "mmp,沒怎麼看,不知道怎麼形容", "tags" : [ "造資料", "真", "難" ] } } ] } }