Сортировка результатов функции Elasticsearch - PullRequest
0 голосов
/ 01 апреля 2019

Как я могу использовать function_score запрос с сортировкой. Прямо сейчас, если я удалю sort, тогда мой запрос вернет правильные результаты, это будет boost компаний с идентификатором компании 158.

Но если я добавлю сортировку, то она игнорирует усиление.

Имеет смысл, почему это происходит, просто не знаю, как это исправить.Я пытался заглянуть в script_score, но не могу получить термин фильтра в сценарии

"script_score": {
            "script": "_score * how to get 158?"
          }


...,
  "query": {
    "function_score": {
      "functions": [
        {
          "filter": {
            "terms": {
              "companyId": [
                158
              ]
            }
          },
          "weight": 2
        }
      ],
      "query": {
        "bool": {
          "filter": [
            {
              "terms": {
                "companyGroupId": [
                  1595
                ]
              }
            }
          ]
        }
      }
    }
  },
  "size": 20,
  "sort": [
    {
      "lastName.keyword": {
        "order": "asc"
      }
    }
  ]
}

ОБНОВЛЕНИЕ Возможно ли что-то подобное ниже?

         "query": {
            "function_score": {
              "functions": [
                {
                  "filter": {
                    "term": {
                      "companyId": 158
                    }
                  },
                  "script_score" : {
                       "script" : "doc['companyId'].value == 158 ? 4 : 0",
                   }
                }
              ],
-- Combining it with an sort--
    "sort": [
        {
          "lastName.keyword": {
            "order": "asc"
          }
        }
      ]

1 Ответ

0 голосов
/ 01 апреля 2019

Для того, чтобы отсортировать и вычислить оценки, вам необходимо включить «Отслеживание результатов», как показано здесь .

По умолчаниюasticsearch не будет вычислять оценкипри сортировке.

...