В запросе к двом индексам я использую "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.