asticsearch: как получить только те документы, у которых нормализованные оценки (_score, деленные на max_score) выше определенного порога

Запрашивая, я пытаюсь получить только документы, чьи нормализованные оценки (_score деленное на max_score) выше определенного порога. Есть ли способ сделать это? Я пытался использовать функцию оценки, но я получаю SearchPhaseExecutionException,

Мой запрос, используя плагин смысла:

POST my_index/my_type/_search
{
    "query": {
      "min_score": 0.4,

      "function_score" : {
         "query" :{
            "query_string": { "_all": "test"}
         },
         "functions": [
         {
            "script_score": {
                "script": "return _score / max_score;"
            }
         }
       ]
     }
   }
}

Трассировка исключений: "ошибка": "SearchPhaseExecutionException[Не удалось выполнить этап [запрос], все сегменты не выполнены; shardFailures

1 ответ

Ваш синтаксис запроса неправильный. Поле min_score должно находиться за пределами блока запроса. И синтаксис "query_string" также неверен. См. Док.

Попробуй это:

POST my_index/my_type/_search
{
    "min_score": 0.4,
    "query": {
      "function_score" : {
         "query" :{
            "query_string": {
                "query": "test",
                "fields": [
                    "_all"
                ]
            }
         },
         "functions": [
         {
            "script_score": {
                "script": "return _score / max_score;"
            }
         }
       ]
     }
   }
}

Кроме того, трассировка ошибки должна содержать информацию об ошибке. Как правило, вы должны быть в состоянии идентифицировать / получить направление для ошибок оттуда.

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