当前位置: 首页 > 知识库问答 >
问题:

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

杨超
2023-03-14

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

我的配置:elastic search版本:2.4.6(问题仍然存在于Elastic5.6中)

My elasticsearch.yml:

script.indexed: true

重现问题的步骤:

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

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

2) 在 Elastic 中插入 doc1:

http PUT localhost:9200/default/type 1/1 @ doc 1 . JSON

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

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

4)寄存器脚本1:

http POST ' localhost:9200/_ scripts/groovy/script 1 ' @ script 1 . 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) 为什么在 Elastic 搜索日志中,我看到脚本在两个不同的时间执行?这是一个错误吗?

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

谢谢!

共有1个答案

姜凯风
2023-03-14

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

 类似资料:
  • 我正在尝试使用无痛脚本更新文档。我的文档包含等字段(字段名称包含字符 )。 文档示例: 执行以下脚本时,我得到了< code >“a4ayc/8”字段的异常: [type=illegal_argument_exception,原因=无效赋值:无法为除法操作赋值 [/]] 脚本: 有没有解决方法?

  • 我是ES的新手,我正在尝试使用聚合编写搜索查询。 在写同样的东西时,我面临着无痛脚本的问题。 哪里可以得到完整的无痛脚本文档,用于弹性搜索?

  • 问题内容: 当我尝试在Jenkins控制台中执行以下Groovy脚本时,发生以下错误。 这已从“ 使用Jenkins”>“ Jenkins脚本控制台”>“参数化系统Groovy脚本”中获取。 该错误表明它包含一些缺少的属性: 我已经尝试使用Groovy脚本插件从Jenkins运行RunningGroovy命令,但在我的情况下不起作用。 问题答案: 如果我→ 执行系统Groovy脚本 → Groov

  • 我正在使用Netbeans 7.4。我使用glassfish服务器创建了一个新的web项目。现在我喜欢在其中使用groovy脚本。但问题是groovy代码没有在那里进行解释。其输出与代码相同。 它应该给输出Hello Barun!但不是给我输出def name='Barun'println“Hello$name!” 我还将最新的groovy-all jar文件包含到我的项目库中。但是还没有运气。我

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 当我执行ps-aef grep elasticsearch HeapDumpOnOutOfMemoryError时看到了这一点 501 373 47 1 0 2:29pm ttys004 0:04.14/usr/bin/Java-xms4g-xmx4g-xss256k-djava.awt.headless=true-xx:+useparnewgc-xx:+useparnewgc-xx:+usepa