ElasticSearch 高級查詢

一. Query Context

在查詢過程當中,除了判斷文檔是否知足查詢條件,ES還會計算一個_score來標識匹配的程度,旨在判斷目標文檔和查詢條件匹配的有多好正則表達式

1.1 模糊匹配

{
	"query":{
		"match":{
			"tittle":"ElasticSearch學習"
		}
	}
}

像上面這樣查詢,會將包含」ElasticSearch「和」學習「結果查出來json

1.2 習語匹配(全詞匹配)

將上面的」match「改成」match_phrase「,即緩存

{
	"query":{
		"match_phrase":{
			"tittle":"ElasticSearch學習"
		}
	}
}

這樣就會把」ElasticSearch學習「作全詞匹配,只有徹底包含」ElasticSearch學習「的結果纔會返回學習

1.3 多個字段模糊匹配查詢

{
	"query":{
		"multi_match":{
			"query":"李六",
			"fields":["author","tittle"]
		}
	}
}

使用」multi_match「,將要查詢的關鍵字寫在」query「子字段中,並列出所要查詢的域,如上是要查詢」author「和」tittle「字段中包含」李六「的結果spa

1.4 「query_string」 語法查詢

語法查詢是根據必定的語法規則進行的查詢,常常在kibana中用,作數據搜索用的,也支持通配符,範圍查詢,布爾查詢,正則表達式等,語法表達比較豐富。code

{
	"query":{
		"query_string":{
			"query":"(李六 AND 哈哈) OR 西瓜書",
			"fields":["author","tittle"]
		}
	}
}

上述查詢示例所要實現的是在域「author」 和「tittle」中,查找同時包含「李六」和「哈哈」,或者包含「西瓜書」的結果。文檔

1.5 字段查詢(結構化數據查詢)

{
	"query":{
		"term":{
			"author":"李六"
		}
	}
}

指定查詢「author」爲「李六」的結果string

1.6 範圍查詢

{
	"query":{
		"range":{
			"word_count":{
				"gte":20000,
				"lte":30000
			}
		}
	}
}

"gte"表示「大於等於」,「lte」表示「小於等於」,這裏是查詢「word_count」字段大於等於20000,小於等於30000的結果。it

二. Filter Context

在查詢過程當中,只判斷該文檔是否知足條件,只有Yes或者No.ast

{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"word_count":20000
				}
			}
		}
	}
}

"filter"要結合「bool」來使用,上述語句查詢「word_count」字段爲20000的數據。「filter」就是用來作數據過濾的,並且ES會對它的結果進行緩存,因此相對「query」要快一些。

三. 複合條件查詢

3.1 固定分數查詢

查詢出」tittle「中含有」es「的結果以後能夠發現每條結果的score是不一樣的,下面的語句把查出來的結果的score值固定爲了2

{
	"query":{
		"constant_score":{
			"filter":{
				"match":{
					"tittle":"es"
				}
			},
			"boost":2
		}
	}
}

3.2 布爾查詢

下面的」should「至關於」或「,只要」author「中包含」李六「或者」tittle「中包含」es「的結果就會被返回

{
	"query":{
		"bool":{
			"should":[
				{
					"match":{
						"author":"李六"
					}
				},
				{
					"match":{
						"tittle":"es"
					}
				}
			]
		}
	}
}

還有」must「和」must_not「,分別對用的」與「,和」非「,使用的時候只須要把」should「替換便可。除此以外,還能夠結合filter對查詢結果作過濾:

{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"author":"李六"
					}
				},
				{
					"match":{
						"tittle":"es"
					}
				}
			],
			"filter":[
				{
					"term":{
						"publish_date":"1995-03-16"
					}
				}
			]
		}
	}
}

以上查詢結果要求」author「必須包含」李六「,」tittle「必須包含」es「,而且對結果進行過濾,只返回」publish_date「爲」1995-03-16「的結果

相關文章
相關標籤/搜索