我用ES 5.5的时候更新到6.7。无痛脚本不起作用
这是5.5如果我想获取嵌套文档[transFilter]我这样做
params['_source’]['carFilter’]
效果很好。
但是
当我使用6.7版本时
params['_source']['carFilter']
我发现它不起作用
所有参数['_source']为空
我的映射
carFilter": {
"type": "nested",
"properties": {
"time": {
"type": "long"
}
}
}
我的数据示例
"carFilter" : [
{
"time" : 20200120
},
{
"time" : 20200121
}
]
和我的查询脚本示例
{
"query" : {
"bool" : {
"must" : [
{
"script" : {
"script" : {
"inline" : "if(params['_source']!=null){
if(params['_source']['carFilter']!=null){
for(def item:params['_source']['carFilter'] ){
if (item.time>1) { return true; }
}
}
}
return false;",
"lang" : "painless",
"params" : {
"rentTime" : 1000
}
}
}
}
]
}
}
}
甚至没有错误只有事实
if(params['_source']!=null){
这一行已经返回
上面的简单无痛只是为了说明问题,下面附上了一个相对真实的问题。
double carPrice=0.00;if(!params['_source'].empty){"+
" def days=params['_source']['everyDayPrice'];if(params['_source']['everyDayPrice']!=null){int size=days.length;" +
" if(size>0){for(int i=0;i<size;i++){String day = days[i]['day'];Double price = days[i]['price'];"+
" if(price!=null&¶ms.get(day)!=null){carPrice=carPrice+params.get(day)*price;}}}}}" +
" return carPrice/params.total"
查看您的查询,您可能希望筛选具有 carFilter.time 的文档
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "carFilter",
"query": {
"range": {
"carFilter.time": {
"gte": 1
}
}
}
}
}
]
}
}
}
请注意,我使用了范围查询来根据您要查找的内容计算时间。
如果上面的回答没有帮助,我建议你仔细阅读这个答案。
如果您有任何疑问,请告诉我。
我想从特定字段中搜索关键字并返回文档。在这些文档之上,我希望遍历每个嵌套对象,并从选定文档的同一特定字段中再次搜索关键字。 如果关键字存在,则检查:如果布尔isCurrent = True,则设置isCurrent=0,并将该值追加到列表中;否则,如果isCurrent = False,则取当前日期时间的差值,结束日期时间,并获得以月为单位的值,并将该值追加到列表中。 最后,从每个文档的列表中获取
问题内容: 假设我有json数据,例如 现在我正在从该json数据访问字段,例如: 如何以最有效的方式从给定的json数据访问第三个字段()? 不起作用 一种可能是我使用for循环构造字符串,然后进行eval评估,但是有没有有效的方法呢? 问题答案: 老实说,我无法理解您的问题。JSON已经结构化了,为什么需要更改结构? 在您的情况下,我将按以下方式访问它: 如果碰巧希望 遍历 数据,则需要: 更
{“_index”:“pie”,“_type”:“flare”,“_id”:“2”,“_version”:1,“_score”:1,“_source”:{“id”:2,“父级”:1,“data”:{“memory”:50}}}
问题内容: 我有一个Java的HashMap,其内容(大家可能都知道)可以由 如果在另一个HashMap中有一个HashMap,即嵌套的HashMap,我将如何访问内容?我可以这样做吗,内联: 谢谢。 问题答案: 您可以像假设的那样进行操作。但是您的HashMap必须模板化: 否则,从第一张地图检索第二张地图后,您必须进行强制转换。
此类的目的是模拟二进制搜索树的功能。在下面的代码中,我试图将它从一个结构和一堆函数改编成一个包装类,称为BST。但是,我不确定的一件事是如何从节点结构中访问“根”。Root当前在BST类中声明。 具体来说,在show函数中。它不像把它和其他函数放在节点中那样简单,因为根需要是唯一的,并且新节点至少被调用一次。Show将不会在当前状态下编译,我不确定从这里开始。
问题内容: 我希望这段代码可以说明问题: 我知道我可能做错了什么,因为继承可能不应该以这种方式使用。但这是我遇到的最简单的方法。而且,除此之外,我很好奇。可能吗? 问题答案: 似乎起作用。 根据JLS第15.12节 班级名称 。超级。NonWildTypeArguments_opt标识符(ArgumentList_opt) 是有效的MethodInvocation