В настоящее время я могу это сделать только по 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)
Подробнее здесь: https://stackoverflow.com/questions/776 ... ch-c-sharp
Мобильная версия