ElasticSearch使用篇 - Query DSL (一) - 前序

Query and filter context

查詢從句的行爲依賴於它是用在查詢上下文還是過濾上下文。

Query context

一個用在查詢上下文的查詢從句回答這樣的問題:“這個文檔匹配這個查詢從句的程度是怎麼樣?”除了文檔是否匹配以外,查詢從句計算分值,這個分值是表示與其他文檔相比,這個文檔匹配的程度。

無論何時,一個查詢從句傳遞給一個query參數,查詢上下文都會生效。
在這裏插入圖片描述

Filter context

在過濾上下文中,一個查詢從句回答這樣的問題:“這個文檔是否匹配這個查詢從句?”答案是是或者否。沒有計算分值。過濾上下文一般用於過濾結構化數據。

e.g.
timestamp是否在2015到2016之間變化?
status屬性是否被設置爲published?

經常使用過濾,ElasticSearch會自動緩存,用來提高性能。

無論何時,一個查詢從句傳遞給一個filter參數,過濾上下文都會生效,比如在bool查詢中的filter或者must_not參數、在constant_score查詢中的filter參數、filter聚合。
在這裏插入圖片描述

Demo

GET /_search

{
	"query": {
		"bool": {
			"must": [
				{"match": {"title": "Search"}},
				{"match": {"content": "ElasticSearch"}}
			],
			"filter": [
				{"term": {"status": "published"}},
				{"range": {"publish_date": {"gte": "2015-01-01"}}}
			]
		}
	}
}

query參數表示查詢上下文。

bool和兩個match從句在查詢上下文使用,用來計算文檔匹配的分數。

filter參數表示過濾上下文。termrange從句用於過濾上下文中。過濾不匹配的文檔,但是不會影響匹配的分數。

在這裏插入圖片描述

Others

在查詢上下文中的用於查詢的分數,以單精度浮點數表示,24位有效精度。分數一旦超出有效精度,會丟失其精度。

在查詢上下文中使用的條件查詢從句,會影響匹配文檔的分數。在過濾上下文使用的查詢從句,則不會影響分數。

在這裏插入圖片描述

Match All Query

最簡單的查詢,匹配所有的文檔,給予所有文檔==_score1.0==。

GET /_search

{
	"query": {
		"match_all": {}
	}
}

_score可以使用boost參數進行改變。

GET /search
{
	"query": {
		"match_all": {
			"boost": 1.2
		}
	}
}

match_all相反,match_none不匹配任何文檔。

GET /_search

{
	"query": {
		"match_none": {}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章