Проверьте значение в массиве params, используя безболезненный скрипт ElasticSearch

Я новичок в ElasticSearch. Я работаю над проектом, где я должен искать списки, которые соответствуют входу http://foo.bar/search?listing=123,456, Я построил массив, ключ и значение которого совпадают и представляют идентификаторы листинга. Я попытался запустить следующий пример, но он не удалось около содержит. Сценарий построен для безболезненного языка. Тем не менее, я всегда получаю ошибку во время выполнения.

Я не могу заставить это работать, что я могу делать неправильно?

 '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)",
],
],
]],
],

1

Решение

Вы можете использовать следующий запрос. Вы можете проверить 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"]
}
}
}
}
]
}
}
}

Что делает запрос, он проверяет, все ли значения присутствуют в параметрах, т.е. 123 & 456 присутствует в id поле, если это произойдет, он будет идти вперед и рассчитать счет соответственно.

Не то id поле является keyword когда я проверил запрос на моем конце.

Вы можете использовать запрос соответственно в вашем PHP-скрипте. Позвольте мне знать, если это помогает!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]