前言
簡單的沒挑戰,來點復雜的,比如查看來自顧家的都有哪些人怎么查呢?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" : [
"造數據",
"真",
"難"
]
}
}
]
}
}
see also:[Elasticsearch查詢規則(一)match和term](https://www.jianshu.com/p/eb30eee13923) that's all