![](/img/trans.png)
[英]remove first element from array and return the array minus the first element
[英]Return first n element from array in elasticsearch query
我在名為 IP 的文檔中有一個數組字段,其中包含 10000 ips 以上的元素。
例如
IP:["192.168.a:A","192.168.a:B","192.168.a:C","192.168.A:b"...........]
現在我用一些過濾器進行了搜索查詢,我得到了結果,但問題是由於上述字段,結果的大小非常大。
現在我只想從數組中獲取 N ips 假設只有 10 個訂單無關緊要。
那我該怎么做...
更新:
除了 IP 字段,還有其他字段,我在該字段上應用了過濾器,而不是在 IP 上。我想要滿足過濾器的整個文檔。我只想限制單個 IP 字段中的元素數量。(如果有,請告訴我除了使用腳本之外的其他方式)。
這種請求可以解決您的問題:
GET ips/_search
{
"query": {
"match_all": {}
},
"script_fields": {
"truncate_ip": {
"script": {
"source": """
String[] trunc_ip = new String[10];
for (int i = 0; i < 10; ++i) {
trunc_ip[i]= params['_source']['IP'][i];
}
return trunc_ip;
"""
}
}
}
}
默認情況下,ES 只返回 10 個匹配的結果,所以我不確定您的搜索查詢是什么以及您到底想限制什么
請在上面澄清並提供您的搜索查詢以提供進一步幫助。
您可以使用scriptedFields從 Elastic Search 中的現有字段生成新字段。 作為評論添加的詳細信息。
GET indexName/_search
{
"_source": {
"excludes": "ips" //<======= Exclude from source the IP field (change the name based on your document)
},
"query": {
"match_all": {} // <========== Define relevant filters
},
"script_fields": {
"limited_ips": { // <========= add a new scipted field
"script": {
"source": "params['_source'].ips.stream().limit(2).collect(Collectors.toList())" // <==== Replace 2 with the number of i.ps you want in result.
}
}
}
}
筆記:
到目前為止,從腳本訪問字段值最快最有效的方法是使用 doc['field_name'] 語法,它從 doc 值中檢索字段值。 Doc 值是一個列式字段值存儲,默認情況下在所有字段上啟用,分析的文本字段除外
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.