我想检索有关字符串字段的数据,如最小,最大和平均长度(通过计算字符串中的字符数)。我的问题是aggregations只能用于数字字段。此外,我尝试使用简单的统计方面,
"query":{
"match_all": {}
},
"facets":{
"stat1":{
"statistical":{
"field":"title"}
}
}
但是我得到了shard失败和SearchPhaseExecutionException。尝试使用脚本字段时,返回的错误是OutOfMemoryError:
"query":{
"match_all": {}
},
"script_fields":{
"test1":{"script": "doc[\"title\"].value" }
}
是否可以使用CURL检索有关简单“标题”字符串字段的数据?谢谢!
答案 0 :(得分:7)
我实际上没有尝试过以下内容,但我相信它应该可行。
首先是一些有用的doc-references:
为了实现统计方面,相关的字段值 从索引加载到内存中。这意味着每个碎片, 应该有足够的内存来包含它们。默认情况下, 动态引入的类型是long和double,一个选项可以减少 内存占用是显式设置相关的类型 可能的字段为short,integer或float。
我不确定如何将脚本字段的类型设置为“short”,这可能是你想要的。减少记忆它应该是可能的。
了解它们之间的区别非常重要 doc ['my_field']。value和_source.my_field。第一个,使用doc 关键字,将导致该字段的条款加载到内存 (缓存),这将导致更快的执行,但更多的内存 消费。此外,doc [...]符号仅允许简单的值 字段(不能从它返回一个json对象)并且只对它有意义 未分析或基于单个术语的字段。
所以ALTERNATIVE:将使用_source
代替doc
而不会缓存长度。
给出:
{
"query" : {
"match_all" : {}
},
"facets" : {
"stat1" : {
"statistical" : {
"script" : "doc['title'].value.length()
//"script" : "_source.title.length() //ALTERNATIVE which isn't cached
}
}
}
}