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
}
}
]
Надеюсь это поможет