ElasticSearch版本:6.3.2html
在elasticsearch(二)---基本數據操做中,咱們已經初步介紹了es基本的查詢方式。在本篇中,主要在其基礎上進行擴展,查漏補缺。node
Preference
控制要在執行搜索的分片副本的首選項。默認狀況下,Elasticsearch會以未指定的順序從可用的分片副本中進行選擇,同時考慮分配感知和自適應副本選擇配置。可是,有時可能須要嘗試將某些搜索路由到某些碎片副本集,例如以便更好地使用每一個拷貝的高速緩存。緩存
Preference
是一個查詢字符串參數,能夠設置爲:elasticsearch
_primary
:該操做僅在主分片上執行ide
_primary_first
:若是可能,操做將在主分片上執行,但若是不是,則將回退到其餘分片post
_replica
:該操做僅在副本分片上執行。若是有多個副本,則它們之間的優先順序是未指定的。ui
_replica_first
:若是可能,操做將在副本分片上執行,但若是不是,則將回退到其餘分片。若是有多個副本,則它們之間的優先順序是未指定的。url
_only_local
:該操做僅在分配給本地節點的分片上執行。spa
注意:_only_local首選項僅保證在本地節點上使用分片副本,這有時對故障排除頗有用。
全部其餘選項並不能徹底保證在搜索中使用任何特定的分片副本,而且在更改索引時,
這可能意味着若是重複搜索在不一樣的刷新狀態的不一樣分片副本上執行,則可能產生不一樣的結果。
複製代碼
_local
:若是可能,將對分配給本地節點的分片執行操做,不然將回退到其餘分片。code
_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"
}
}
}
複製代碼
容許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。
返回每一個搜索匹配的版本。
GET /_search
{
"version": true,
"query" : {
"term" : { "user" : "kimchy" }
}
}
複製代碼
排除_score
小於min_score
中指定的最小值的文檔:
GET /_search
{
"min_score": 0.5,
"query" : {
"term" : { "user" : "kimchy" }
}
}
複製代碼
參考:es官方文檔