php - 使用ElasticSearch无痛脚本在params数组中检查值是否存在

标签 php elasticsearch elasticsearch-painless

我是ElasticSearch的新手。我正在一个项目中,我必须搜索与输入http://foo.bar/search?listing=123,456匹配的列表。我建立了一个数组,其键和值相同,并表示列表ID。我尝试运行以下示例,但在包含附近失败。该脚本是为轻松编写语言而构建的。但是,我总是会遇到运行时错误。

我无法使它正常工作,我可能做错了什么?

 'function_score' => [
       'query' => $query,
           'score_mode' => 'sum',
              'functions' => [[
                'script_score' => [
                 'script' => [
                   'params' => ['listing' => [123 => 123, 456 => 456]],
    'source' => "(params.listing.contains(doc['id'].value) ? Math.pow(3, 3) : 0)",
                            ],
                        ],
                    ]],
                ],

最佳答案

您可以使用以下查询。您可以检查script部分,了解所需的实现方式。

POST <your_index_name>/_search
{
  "query": {
    "function_score": {
      "score_mode": "sum", 
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": """
                  boolean allValues = false;
                  for(int i=0; i<params.value.size(); i++){
                    if(doc['id'].value.contains(params.value.get(i))){
                      allValues = true;
                    }else{
                      allValues = false;
                      break;
                    }
                  } 
                  if(allValues){
                    return Math.pow(3,3)
                  } else {
                    return 0;
                  }
                """,
              "params":{
                "value": ["123","456"]
              }
            }
          }
        }
      ]
    }
  }
}

该查询的作用是检查是否存在于params中的所有值,即123 & 456是否存在于id字段中,如果存在,它将继续进行操作并相应地计算得分。

当我在最后测试查询时,不是id字段是keyword

您可以在php脚本中相应地使用查询。让我知道这是否有帮助!

关于php - 使用ElasticSearch无痛脚本在params数组中检查值是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476036/

相关文章:

elasticsearch - 如何在同一路径的多个嵌套子查询中返回多个内部命中?

python - Haystack 使用的 ElasticSearch 索引因未知原因损坏

elasticsearch - 如何使用存储的文档中的属性运行查询?

elasticsearch - 在前端进行搜索操作时获取数据计数

php - 错误 Symfony Doctrine PostgreSQL : SQLSTATE[42703]: Undefined column: 7 ERROR

javascript - JSON 属性返回未定义

php - 学说 DQL JOIN

php - 如何制作一个表单来提交自身

java - Elasticsearch - 使用 java api 删除嵌套对象不起作用

elasticsearch - 如何在Kibana中修改数据表列的值