我正在使用AWS ElasticSearch服务(1.5.2),并且每秒接收的请求超过100个。
几乎每个查询都有地理过滤器,全文过滤器,整数过滤器...... 但我有一个问题,添加一个简单的过滤器;布尔术语过滤器。
{
"from" : 0,
"size" : 10,
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"bool" : {
"must" : [ {
"terms" : {
"my_boolean_field" : [ false ]
}
},
{
"range" : {
"_timestamp" : {
"from" : null,
"to" : "2016-05-04T15:12:00Z",
"include_lower" : true,
"include_upper" : false
}
}
} ]
}
}, {
"geo_distance" : {
"rounded_location" : [ -8.42, 42.24 ],
"distance" : "300000m",
"distance_type" : "plane",
"optimize_bbox" : "indexed"
}
} ]
}
}
}
},
"sort" : [ {
"_geo_distance" : {
"rounded_location" : [ {
"lat" : 42.24,
"lon" : -8.42
} ],
"unit" : "m"
}
}, {
"date" : {
"order" : "desc"
}
}, {
"price" : {
"order" : "asc"
}
} ]
}
添加布尔过滤器后,ElasticSearch的所有节点中的CPU从10%增加到30%,并且在10-15分钟内,平均延迟从20到400毫秒增加,一段时间后延迟恢复到正常数字但CPU没有&# 39;吨
该布尔字段已正确映射并且可搜索...有没有人对此问题有任何暗示? (查询由"术语"而不是"术语"由于我正在使用的官方Java库而形成。
答案 0 :(得分:0)
最后,我无法像我在这里描述的那样解决执行查询的问题...
我根据相关字段的TRUE / FALSE值解决了这个创建 2种不同文档类型的问题。
使用这种方法,没有CPU增加,没有延迟问题......而且由于ElasticSearch一次可以搜索多种文档类型,因此这种分离不会对我的应用程序代码造成重大问题;)
现在,我在两种情况下执行相同的查询,但仅更改文档类型目标:
POST /my_index/doc_type_with_true_value/_search
POST /my_index/doc_type_with_false_value/_search
{
"from" : 0,
"size" : 10,
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"bool" : {
"must" : [ {
"range" : {
"_timestamp" : {
"from" : null,
"to" : "2016-05-04T15:12:00Z",
"include_lower" : true,
"include_upper" : false
}
}
} ]
}
}, {
"geo_distance" : {
"rounded_location" : [ -8.42, 42.24 ],
"distance" : "300000m",
"distance_type" : "plane",
"optimize_bbox" : "indexed"
}
} ]
}
}
}
},
"sort" : [ {
"_geo_distance" : {
"rounded_location" : [ {
"lat" : 42.24,
"lon" : -8.42
} ],
"unit" : "m"
}
}, {
"date" : {
"order" : "desc"
}
}, {
"price" : {
"order" : "asc"
}
} ]
}