Когда счет вычисляется в запросе bool? - PullRequest
0 голосов
/ 10 июля 2019

Я использую безболезненный скрипт для оценки документа в запросе bool.Мне нужно по-разному оценивать каждое условие "must" в запросе bool.

Поэтому у меня есть два варианта:

  1. Я завершаю каждый запрос must в script_score, чтобы я мог использоватьотдельный скрипт для каждого подзапроса
  2. Я заключаю весь запрос bool в счет скрипта, поэтому мне нужно использовать уникальный скрипт.Это значит, что я должен дать этому сценарию в качестве параметра желаемый тип оценки и добавить предложения if в сценарии

Вариант 1 будет выглядеть следующим образом:

GET /_search
{
  "source": {
    "query": {
      "script_score": {
        "query": {
          "bool": {
            "must": [
              {*subquery1_here*},
              {*subquery2_here*}
            ]
          }
        },
        "script": {
          "id": "universal_script",
          "params": {
            "query": ["{{subquery1-params}}", "{{subquery2-params}}"],
            "score-type": ["{{subquery1-score_type}}", "{{subquery2-score_type}}"]
          }
        }
      }
    }
  }
}

Параметр2 выглядело бы так:

GET /_search
{
  "source": {
    "query": {
      "bool": {
        "must": [
          {
            "script_score": {
              "query": {*field1_subquery_here*}  
              },
              "script": {
                "id": "script-1",
                "params": {
                  "query": "{{subquery1-params}}"
                }
              }
            }
          },
          {
            "script_score": {
              "query": {*field2_subquery_here*}  
              },
              "script": {
                "id": "script-2",
                "params": {
                  "query": "{{subquery2-params}}"
                }
              }
            }
          }
        ]
      }
    }
  }
}

Я бы предпочел вариант 2, но мне интересно, стоит ли он больше вычислительной мощности?

Я боюсь, что вариант 2 заключается в том, что Elastic будет запускать каждый script_score независимо изабить все совпадения по заданному сценарию.Затем запустит запрос bool и получит только тот документ, который соответствует обоим подзапросам.Это было бы плохо, потому что скрипт для скоринга выполнялся бы на гораздо большем количестве документов, чем с опцией 1.

Так вот почему мне интересно, когда вычисляется оценка в запросе bool?

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