Сортировка с запросом "indices_boost"

В запросе к двом индексам я использую "indices_boost" с соответсвующими коефициентами. Мне нужно еще дополнительно отсортировать по определенному полю, да так чтоб сначала ишли результаты с одного индекса, а затем с другого

Какая версия elasticsearch?

=6.2

Если только 2 индекса, то проще всего просто отсортировать по полю _index.

PUT test_a/_doc/1
{
  "test": "foo"
}

PUT test_a/_doc/2
{
  "test": "bar"
}


PUT test_a/_doc/3
{
  "test": "baz"
}


PUT test_b/_doc/1
{
  "test": "foo"
}


PUT test_b/_doc/2
{
  "test": "baz"
}


POST test_*/_doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_index": {
      "order": "asc"
    },
    "test.keyword": {
      "order": "asc"
    }
  }
}

клас, спасибо!

а если больше двух?

Тогда надо будет либо индексы именовать, чтобы они сортировались правильно, либо _score присваивать в зависимости от названия в function_score:

POST test_*/_doc/_search
{
  "query": {
    "function_score": {
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "filter": {"term": {"_index": "test_a"}},
          "weight": 1
        },
        {
          "filter": {"term": {"_index": "test_b"}},
          "weight": 2
        },
        {
          "filter": {"term": {"_index": "test_c"}},
          "weight": 3
        }
      ],
      "score_mode": "first",
      "boost_mode": "replace"
    }
  },
  "sort": {
    "_score": {
      "order": "asc"
    },
    "test.keyword": {
      "order": "asc"
    }
  }
}

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.