簡體   English   中英

Elasticsearch腳本查詢數組字段大小比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM