ElasticSearch版本:6.3.2
在elasticsearch(二)---基本資料操作中,我們已經初步介紹了es基本的查詢方式。在本篇中,主要在其基礎上進行擴充套件,查漏補缺。
1.首選項(Preference)
Preference
控制要在執行搜尋的分片副本的首選項。預設情況下,Elasticsearch會以未指定的順序從可用的分片副本中進行選擇,同時考慮分配感知和自適應副本選擇配置。但是,有時可能需要嘗試將某些搜尋路由到某些碎片副本集,例如以便更好地使用每個拷貝的快取記憶體。
Preference
是一個查詢字串引數,可以設定為:
_primary
:該操作僅在主分片上執行
_primary_first
:如果可能,操作將在主分片上執行,但如果不是,則將回退到其他分片
_replica
:該操作僅在副本分片上執行。如果有多個副本,則它們之間的優先順序是未指定的。
_replica_first
:如果可能,操作將在副本分片上執行,但如果不是,則將回退到其他分片。如果有多個副本,則它們之間的優先順序是未指定的。
_only_local
:該操作僅在分配給本地節點的分片上執行。
注意:_only_local首選項僅保證在本地節點上使用分片副本,這有時對故障排除很有用。
所有其他選項並不能完全保證在搜尋中使用任何特定的分片副本,並且在更改索引時,
這可能意味著如果重複搜尋在不同的重新整理狀態的不同分片副本上執行,則可能產生不同的結果。
複製程式碼
_local
:如果可能,將對分配給本地節點的分片執行操作,否則將回退到其他分片。
_prefer_nodes:abc,xyz
:如果可能,將在具有所提供的節點id之一(在這種情況下為abc或xyz)的節點上執行該操作。如果在多個所選節點上存在合適的分片副本,則未指定這些副本之間的首選順序。
_shards:2,3
:將操作限制為指定的分片。 (在這種情況下為2和3)。此首選項可以與其他首選項結合使用,但必須首先顯示。如:_shards:2,3 | _local
_only_nodes:abc*,x*yz,...
:將操作限制為根據節點規範指定的節點。如果在多個所選節點上存在合適的分片副本,則未指定這些副本之間的首選順序。
注意:_primary,_primary_first,_replica和_replica_first已棄用,因為不建議使用它們。
它們無助於避免因使用具有不同重新整理狀態的分片而產生的不一致結果,並且Elasticsearch使用同步複製,因此主資料通常不包含比其副本更新的資料。
如果無法搜尋首選副本,_primary_first和_replica_first首選項將無聲地回退到非首選副本。
如果將副本提升為主副本,則_primary和_replica首選項將以靜默方式更改其首選分片,這可能隨時發生。
_primary首選項會在主分片上新增不必要的額外負載。
也可以使用_only_nodes,_prefer_nodes或自定義字串值來獲取這些選項的快取相關優勢。
複製程式碼
Custom (string) value
:任何不以_開頭的值。如果兩個搜尋都為其首選項提供相同的自定義字串值,並且基礎叢集狀態不會更改,則將使用相同的分片順序進行搜尋。這並不能保證每次都使用完全相同的分片:群集狀態以及所選分片可能會因包括分片重定位和分片失敗在內的多種原因而發生變化,並且節點有時可能會拒絕導致備用節點回退的搜尋。然而,在實踐中,碎片的排序趨於長時間保持穩定。自定義首選項值的良好候選者類似於Web會話ID或使用者名稱。
例如,使用使用者的會話ID xyzabc123,如下所示:
GET /_search?preference=xyzabc123
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
複製程式碼
2.解釋(Explain)
允許Explain
每個命中如何計算其分數。無論文件是否與特定查詢匹配,這都可以提供有用的反饋。
GET /twitter/_doc/0/_explain
{
"query" : {
"match" : { "message" : "elasticsearch" }
}
}
複製程式碼
這將產生以下結果:
{
"_index": "twitter",
"_type": "_doc",
"_id": "0",
"matched": true,
"explanation": {
"value": 1.6943599,
"description": "weight(message:elasticsearch in 0) [PerFieldSimilarity], result of:",
"details": [
{
"value": 1.6943599,
"description": "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
"details": [
{
"value": 1.3862944,
"description": "idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) from:",
"details": [
{
"value": 1.0,
"description": "docFreq",
"details": []
},
{
"value": 5.0,
"description": "docCount",
"details": []
}
]
},
{
"value": 1.2222223,
"description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
"details": [
{
"value": 1.0,
"description": "termFreq=1.0",
"details": []
},
{
"value": 1.2,
"description": "parameter k1",
"details": []
},
{
"value": 0.75,
"description": "parameter b",
"details": []
},
{
"value": 5.4,
"description": "avgFieldLength",
"details": []
},
{
"value": 3.0,
"description": "fieldLength",
"details": []
}
]
}
]
}
]
}
}
複製程式碼
所有引數:
_source
:設定為true以檢索所解釋文件的_source
。您還可以使用_source_include
&_source_exclude
檢索部分文件。
stored_fields
:允許控制哪些儲存的欄位作為所解釋文件的一部分返回。
routing
:在索引期間使用路由的情況下控制路由。
parent
:與設定路由引數的效果相同。
preference
:控制執行解釋的分片。
source
:允許將請求的資料放入url的查詢字串中。
q
:查詢字串(對映到query_string查詢)。
df
:在查詢中未定義欄位字首時使用的預設欄位。預設為_all欄位。
analyzer
:分析查詢字串時要使用的分析器名稱。預設為_all欄位的分析器。
analyze_wildcard
:是否應分析萬用字元和字首查詢。預設為false。
lenient
:如果設定為true將導致忽略基於格式的失敗(如向數字欄位提供文字)。預設為false。
default_operator
:要使用的預設運算子可以是AND或OR。預設為OR。
3.版本(Version)
返回每個搜尋匹配的版本。
GET /_search
{
"version": true,
"query" : {
"term" : { "user" : "kimchy" }
}
}
複製程式碼
4.最小分數(min_score)
排除_score
小於min_score
中指定的最小值的文件:
GET /_search
{
"min_score": 0.5,
"query" : {
"term" : { "user" : "kimchy" }
}
}
複製程式碼
參考:es官方文件