弹性搜索运行两次groovy脚本,这是一个错误吗?

时间:2018-01-26 03:29:50

标签: elasticsearch elasticsearch-5

我发现了脚本查询的一些意外行为(脚本在一个简单的查询中执行了两次)。

我的配置:弹性搜索版本:2.4.6(问题仍然存在于弹性5.6中)

我的elasticsearch.yml:

script.indexed: true

重现问题的步骤:

1)我有一个简单的文档,doc1.json:

{
    "id": "1",
    "tags": "t1"
}

2)在Elastic:

中插入doc1

http PUT localhost:9200 / default / type1 / 1 @ doc1.json

3)我有一个简单的groovy脚本,script1.json(只返回得分并打印出来):

{
     "script": "println('Score is ' + _score * 1.0 + ' for document ' + doc['id'] + ' at ' + DateTime.now().getMillis()); return _score;"
}

4)注册script1:

http POST'localhost:9200 / _scripts / groovy / script1'@ script1.json

5)执行此query_with_script.json:

{
   "query":{
      "function_score":{
         "query":{
            "bool":{
               "must":{
                  "match":{
                     "tags":{
                        "query":"t1",
                        "type":"boolean"
                     }
                  }
               }
            }
         },
         "functions":[
            {
               "script_score":{
                  "script":{
                     "id":"script1",
                     "lang":"groovy"
                  }
               }
            }
         ],
         "boost_mode":"replace"
      }
   },
   "explain" : true
}

http GET'localhost:9200 / default / type1 / _search'@ query_with_script.json

6)为什么在弹性搜索日志中我看到脚本在两个不同的时间执行?这是一个错误吗?

Score is 0.19178301095962524 for document [1] at 1516586818596
Score is 0.19178301095962524 for document [1] at 1516586818606

非常感谢!

1 个答案:

答案 0 :(得分:1)

你应该删除explain标志,因为它可能是脚本执行两次的原因。