ElasticSearch сортировка по нескольким скриптам - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь использовать несколько сценариев для сортировки результатов в Elastic 6.7

К сожалению, я не нашел способа пробовать много комбинаций.

Не могуиспользуйте только один скрипт, чтобы делать все, потому что фильтры и сортировки динамические.

Это мой запрос:

{
  "query": {
    "bool": {
      "must": [],
      "filter": []
    }
  },
  "sort": {
    "_script": [
      {
        "type": "number",
        "order": "desc",
        "script": {
          "lang": "painless",
          "source": "doc['status.keyword'].value == 'active' ? 1 : 0;"
        }
      },
      {
        "type": "number",
        "order": "desc",
        "script": {
          "lang": "painless",
          "source": "(doc['s_price'].value/doc['currency.usd_c'].value*params.cvs)",
          "params": {
            "cvs": 42.71
          }
        }
      }
    ]
  },
}

Спасибо !!

1 Ответ

1 голос
/ 03 апреля 2019
POST /_update_by_query
{
  "script": {
    "source": "ctx._source.active += ctx._source['status.keyword'].value == 'active' ? 1 : 0;",
    "lang": "painless"
  },
  "query": {
    "match_all": {}
  }
}

GET /_search
{
    "query": {
        "function_score": {
            "query": {
                "bool": {
                  "must": [],
                  "filter": []
                }
              },
            "script_score" : {
                "script": {
                  "source": "(doc['s_price'].value/doc['currency.usd_c'].value*params.cvs)",
                  "params": {
                    "cvs": 42.71
                  }
                }
            }
        }
    },
    "sort": [{
        "active": "desc"
    },
    {
        "score": "desc"
    }]
}

Добавьте поле active для одного из запросов с использованием массового обновления. И используйте запрос function_score для вычисления другого значения. Сортировать сначала по active, а затем по score

...