Elasticsearch terms查詢
阿新 • • 發佈:2018-12-19
terms 查詢
只要有被提供的欄位值(未被分析)被文件匹配,該文件將會被此terms查詢匹配。
GET /_search
{
"query": {
"terms" : { "user" : ["kimchy", "elasticsearch"]}
}
}
高亮terms查詢只會盡力,根據所選擇的高亮器的實現以及terms查詢中欄位值的數量,terms查詢中的欄位值可能不會被高亮。
1 欄位值查詢機制
當需要指定具有大量欄位值的terms過濾器時,從索引中的文件中獲取這些欄位值將會非常有用。一個具體的例子就是用於過濾粉絲髮送的推文。可能會在欄位值過濾器中指定大量的使用者id,在這種情況下,使用欄位值過濾器查詢機制就極為重要。
欄位值查詢機制支援以下選項:
- index:從中獲取欄位值的索引
- type:從中獲取欄位值的型別
- id:從中獲取欄位值的文件的id
- path:設定為用於為terms過濾器獲取確切值的路徑的欄位
- routing:當檢索外部欄位值文件時,需要使用自定義路由值
terms過濾器的值將會從由指定索引的指定型別的指定id確定的文件的欄位中獲取。在內部,需要執行獲取請求來從指定路徑獲取值。此特性執行時,需要保證_source被儲存。
如果“引用”欄位值資料並不多,考慮使用具有單切片且跨所有節點備份的索引。查詢欄位值過濾器傾向於在本地節點上執行獲取請求,儘量減少網路的使用。
執行具有大量欄位值的terms查詢將會非常緩慢,因為每個附加的欄位值都需要額外的處理與記憶體。為了防止這一情況的發生,用於terms查詢的欄位值的最大數量(無論是直接指定的還是通過查詢機制獲取的)被限制為65536。對於特定索引,可以通過索引設定index.max_terms_count改變這一預設值。
2 案例:使用查詢機制
PUT /users/_doc/2
{
"followers" : ["1", "3"]
}
PUT /tweets/_doc/1
{
"user" : "1"
}
note:設定user2的粉絲為user1與user3。
GET /tweets/_search
{
"query" : {
"terms" : {
"user" : {
"index" : "users",
"type" : "_doc",
"id" : "2" ,
"path" : "followers"
}
}
}
}
note:搜尋user2的粉絲。
從文件查詢獲取terms查詢所需的欄位值,也可以從指定文件的內部物件的陣列的指定欄位中獲取。
PUT /users/_doc/2
{
"followers" : [
{
"id" : "1"
},
{
"id" : "2"
}
]
}
note:查詢路徑設定為followers.id即可。