object數據類型
除了一些基本數據類型以外,要注意有一個
object
類型,即和json的數據類型。
大部分複雜的數據類型,都是以這個形式存在的
querry和filter的區別
都是刪選數據,最明顯的區別就是前者計算分數,而後者不進行計算。
我們要知道,在es進行查詢的時候,他會根據相關度(匹配程度)進行一個展示的排序,而這部分的算法會消耗很大的一部分資源和速度。
由此,我們可以得出一個優化查詢效率的辦法,就是儘量做過濾先,然後查詢,如果順序不重要,可以對查詢進行分數不計算的設置,這樣可以大大加快查詢效率。(查詢的時候加"constant_score"
不計算分數)
GET /company/employee/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"age": {
"gte": 30
}
}
}
}
}
}
bool查詢的相關度計算
很多時候我們會發現,
bool
查詢出來的結果會與我們想要的結果的大相徑庭,這是因爲bool查詢的相關度算法的問題。
bool
一般是由must
,must_not
,should
,filter
這些子查詢組成
每個子查詢都會計算一個document針對它的相關度分數,然後bool綜合所有分數,合併爲一個分數,當然filter是不會計算分數的
match query的再次學習
- 全文檢索的時候,進行多個值的檢索,有兩種做法,match query;should
- match query 底層會自動轉化成bool查詢
- 控制搜索結果精準度:and operator,minimum_should_match