我目前正在运行带有两个节点的Elasticsearch v.1.6设置,以及一个包含5个分片的索引。对于这个索引,我添加了一个包含对我的索引的引用的别名,以及一个Groovy脚本过滤器,它有助于避免使用无效的开始和结束日期的文档。别名如下:
"MyIndex" : {
"aliases": {
"MyIndex_alias": {
"filter" : {
"script":{
"script":
"\r\n entryDate = doc['availability.start'].date.getMillis();
\r\n exitDate = doc['availability.end'].date.getMillis();
\r\n rightNow = DateMidnight.now().getMillis();
\r\n\r\n if (entryDate < rightNow && exitDate > rightNow)\r\n {
\r\n return true;
\r\n }
\r\n return false;",
"lang":"groovy"}}}}}
执行简单查询(例如term *(/ MyIndex_alias / my_type / _search?request.q = *))时,许多分片将无法使查询返回以下消息:
"failed": 1,
"failures": [
{
"index": "MyIndex",
"shard": 2,
"status": 500,
"reason": "RemoteTransportException[[MyESCluster][inet[/10.131.43.61:9301]][indices:data/read/search[phase/query]]]; nested: QueryPhaseExecutionException[[MyIndex][2]: query[ConstantScore(ScriptFilter(
entryDate = doc['availability.start'].date.getMillis();
exitDate = doc['availability.end'].date.getMillis();
rightNow = DateMidnight.now().getMillis();
if (entryDate < rightNow && exitDate > rightNow)
{
return true;
}
return false;))],from[0],size[10]: Query Failed [Failed to execute main query]]; nested: GroovyScriptExecutionException[ArrayIndexOutOfBoundsException[null]]; "
}
]
我已经验证了以下内容:
对此事的任何帮助将不胜感激!