PHP Elasticsearch 7.5 - Безболезненное состояние скрипта не дает правильных результатов

Это мой запрос elasticsearch. Я пытаюсь получить все документы, соответствующие условию, еслиjob_id равно 1, то получите документы, в которых sourced = 0 иначе если job_id не 1, тогда получите документы с sourced = 1.

Но возвращает все документы.

[
'script' => 
    ['script' => 
        [
            'lang' => 'painless', 
            'source' => "(doc['job_id'].size() > 0 && doc['job_id'].value !==  params.jid) || (doc['job_id'].size() > 0 && doc['job_id'].value == params.jid && doc['sourced'].value == 0)",
            'params' => ['jid' => 1]
        ]
    ]
]

Сопоставление упомянутых полей

"job_id" : {
      "type" : "long"
    },
"sourced" : {
      "type" : "byte"
    },

1 ответ

Решение

Каждый документ оценивается встроенным скриптом.

Пример (на основе ваших сопоставлений):

Вставить документы

PUT my_index/_doc/1
{
  "job_id": 1,
  "sourced": 0
}

PUT my_index/_doc/2
{
  "job_id": 0,
  "sourced": 2
}

Поисковый запрос

GET my_index/_search (Kibana usage)
{
  "query": {
    "script": {
      "script": {
        "lang": "painless",
        "source": "doc['job_id'].value == params.jid ? doc['sourced'].value == 0 : doc['sourced'].value == 1",
        "params": {
          "jid": 1
        }
      }
    }
  }
}

Ваше использование

[
'script' => 
    ['script' => 
        [
            'lang' => 'painless', 
            'source' => "doc['job_id'].value == params.jid ? doc['sourced'].value == 0 : doc['sourced'].value == 1",
            'params' => ['jid' => 1]
        ]
    ]
]

Полученные результаты

 "hits" : [
  {
    "_index" : "my_index",
    "_type" : "_doc",
    "_id" : "1",
    "_score" : 1.0,
    "_source" : {
      "job_id" : 1,
      "sourced" : 0
    }
  }
]

Надеюсь это поможет

Другие вопросы по тегам