Я изо всех сил пытаюсь заставить запрос работать сasticsearch, где я комбинирую запрос multi_match с повышение поля, field_value_factors, а затем функция, которая должна повысить любые документы, соответствующие конкретному типу документа.
Запрос работает безупречно, за исключением случаев, когда я добавляю во втором запросе функцию function, которая выдает следующие ошибки:
Вы можете определить массив [functions] или одну функцию, но не обе. уже найден [field_value_factor], теперь встречаются [функции]
Чтобы было ясно …
Моя цель — повысить все документы, содержащие поле «doctype», соответствующее термину «html», в 10 раз, используя блок «functions» ниже
Это работает
$param = json_encode(
array(
"query" => array(
"function_score" => array(
"query" => array(
"multi_match" => array(
"query" => $query,
"fields" => array("title^5","body"),
"fuzziness" => 1
)
),
"field_value_factor" => array(
"field" => "hits",
"modifier" => "log1p",
"factor" => 10
),
"field_value_factor" => array(
"field" => "weight",
"modifier" => "log1p",
"factor" => 3
)
)
),
"size" => $offset,
"from" => $start
)
);
Добавление следующего предложения ко второму запросу не работает
"functions" => [array("filter" => array("term" => array("doctype" => "html")), "boost_factor" => 10)],
"max_boost" => 10,
"boost_mode" => "multiply"
** Полный запрос — это не работает **
$param = json_encode(
array(
"query" => array(
"function_score" => array(
"query" => array(
"multi_match" => array(
"query" => $query,
"fields" => array("title^5","body"),
"fuzziness" => 1
)
),
"field_value_factor" => array(
"field" => "hits",
"modifier" => "log1p",
"factor" => 10
),
"field_value_factor" => array(
"field" => "weight",
"modifier" => "log1p",
"factor" => 3
),
"functions" => [
array("filter" => array("term" => array("doctype" => "html")), "boost_factor" => 10)
],
"max_boost" => 10,
"boost_mode" => "multiply")
),
"size" => $offset,
"from" => $start
)
);
Задача ещё не решена.
Других решений пока нет …