[英]Elasticsearch script query array field size comparison
在Elasticsearch中是否可以對數組字段的長度進行比較?
例如,以下工作(sourceId是文本類型字段)
GET /entity_active/_count
{
"query": {
"bool" : {
"must" : {
"script" : {
"script" : {
"inline": "doc['sourceId'].values.size() > 0",
"lang": "painless"
}
}
}
}
}
}
但是以下內容不起作用(用戶是數組字段)
GET /entity_active/_count
{
"query": {
"bool" : {
"must" : {
"script" : {
"script" : {
"inline": "doc['users'].values.size() > 0",
"lang": "painless"
}
}
}
}
}
}
后者返回這樣的響應:
"error": {
"root_cause": [
{
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"org.elasticsearch.search.lookup.LeafDocLookup.get(LeafDocLookup.java:80)",
"doc['users'].values.size() > 0",
" ^---- HERE"
],
"script": "doc['users'].values.size() > 0",
"lang": "painless"
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
我是否需要使用其他方法來利用此類數組字段?
數組未在ES中建立索引,因此您無法通過doc_values(即通過doc.
)訪問數組。 但是,您可以使用ctx._source
訪問存在該數組的_source
文檔。 嘗試使用以下腳本:
_source.users.size() > 0
要么
_source.users.length > 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.