Нормализовать счет Elasticsearch с длиной подполя - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть несколько документов в ElasticSearch, и у каждого документа есть одно или несколько приложений. Когда я выполняю поиск по тексту приложений, я часто получаю оценки, превышающие 1. Когда я выполняю поиск по действительно общим шаблонам, я понимаю, что чем больше в документе приложений, тем больше его оценка. Итак, я стремлюсь «нормализовать» баллы, разделив каждый балл документа на количество приложений.

Например, для этого запроса:

"query": {
  "match": {
    "document.appendices.text" = "What is love?"
  }
}

Я хочу сделать score = score / length(document.appendices), но я не знаю, как это выразить.

Возможно ли это, или все приложения должны быть проиндексированы как документ для достижения этой цели?

Большое спасибо сообществу!

1 Ответ

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

Используйте запрос function_score, чтобы изменить уже рассчитанную оценку _score

GET /_search
{
    "query": {
        "function_score": {
            "query": {
                "match": { "document.appendices.text": "What is love?" }
            },
            "script_score" : {
                "script" : {
                  "source": "_score/doc['document.appendices'].length"
                }
            }
        }
    }
}

См. https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#score-functions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...