Сортировка по нескольким полям в ElasticSearch C#C#

Место общения программистов C#
Ответить
Anonymous
 Сортировка по нескольким полям в ElasticSearch C#

Сообщение Anonymous »

Я хочу отсортировать свой ответ по Rank_tx Desc, а затем по _score Desc.
В настоящее время я могу это сделать только по Rank_tx или _score.
.csproj

Код: Выделить всё



net7.0
.........




{
search.Index(_indexOptions.Index)
.Query(q => q
.Bool(b => b
.Should(
sh => sh.MatchPhrasePrefix(m => m.Field(f => f.field1).Query(input)),
sh => sh.MatchPhrase(m => m.Field(f => f.field1).Query(input).Slop(50))
)
)
)
.Size(50)
.Sort(s => s
.Field(Infer.Field(f => f.rank_tx), fs => fs.Order(SortOrder.Desc)))
.Highlight(highlightOptions);
}, cancellationToken);
Это отлично работает на консоли.

Код: Выделить всё

GET /my_index/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase_prefix": {
"my_field_1": {
"query": input
}
}
},
{
"match_phrase": {
"my_field_2": {
"query": input,
"slop": 50
}
}
}
]
}
},
"sort": [
{ "rank_tx": { "order": "desc" } },
{ "_score": { "order": "desc" } }
],
"size": 50
}
Я просмотрел официальную документацию, но не нашел решения.
Эти исправления не сработали: -
  • Добавлены два поля сортировки.

Код: Выделить всё

 .Sort(s => s
.Field(Infer.Field(f => f.rank_tx), fs => fs.Order(SortOrder.Desc))
.Field("_score", fs => fs.Order(SortOrder.Desc)))
  • Используется дескриптор SortOptionsDescriptor

Код: Выделить всё

var sortFields = new SortOptionsDescriptor()
.Field(Infer.Field(f => f.rank_tx), fs => fs.Order(SortOrder.Desc))
.Field("_score", fs => fs.Order(SortOrder.Desc));

.Sort(sortFields)
В обоих случаях я получил ответ, отсортированный по _score, что означает, что учитывается только последнее поле.

Подробнее здесь: https://stackoverflow.com/questions/776 ... ch-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»