Skip to content

Allow Default for SortFieldDescriptor #1292

@markwalsh-liverpool

Description

@markwalsh-liverpool

When creating a SortFieldDescriptor it should be possible to specific default (relevance) and have that ignored when creating a SearchDescriptor, in my specific example, I build up a sort descriptor independently based on a string

 private static SortFieldDescriptor<ElasticVideo> GetDocumentSortQuery(ElasticSearchVideoParameters searchParameters)
        {
            var sortFieldDescriptor = new SortFieldDescriptor<ElasticVideo>();

            switch (searchParameters.SortBy)
            {
                case SearchSortOrder.Relevance:
                    return null;
                case SearchSortOrder.CreatedDateDesc:
                    sortFieldDescriptor.Descending().OnField("CreatedDate");
                    break;
                case SearchSortOrder.CreatedDateAsc:
                    sortFieldDescriptor.Ascending().OnField("CreatedDate");
                    break;
                case SearchSortOrder.TitleDesc:
                    sortFieldDescriptor.Descending().OnField("Title.raw");
                    break;
                case SearchSortOrder.TitleAsc:
                    sortFieldDescriptor.Ascending().OnField("Title.raw");
                    break;
                case SearchSortOrder.LikesDesc:
                    sortFieldDescriptor.Descending().OnField("LikesCount");
                    break;
                case SearchSortOrder.LikesAsc:
                    sortFieldDescriptor.Ascending().OnField("LikesCount");
                    break;
                case SearchSortOrder.DislikesDesc:
                    sortFieldDescriptor.Descending().OnField("DislikeCount");
                    break;
                case SearchSortOrder.DislikesAsc:
                    sortFieldDescriptor.Ascending().OnField("DislikeCount");
                    break;
                case SearchSortOrder.ViewsDesc:
                    sortFieldDescriptor.Descending().OnField("ViewCount");
                    break;
                case SearchSortOrder.ViewsAsc:
                    sortFieldDescriptor.Ascending().OnField("ViewCount");
                    break;
            }

            return sortFieldDescriptor;
        }

So when it comes to use this built descriptor I have to use an if statement

            if (documentSortQuery != null)
                searchDescriptor
                    .AllIndices()
                    .Type("video")
                    .Query(documentQuery)
                    .Sort(x => documentSortQuery)
                    .Skip(searchParameters.Skip)
                    .Take(searchParameters.Take);
            else
            {
                searchDescriptor
                    .AllIndices()
                    .Type("video")
                    .Query(documentQuery)
                    .Skip(searchParameters.Skip)
                    .Take(searchParameters.Take);
           }

Not sure if there is a more elegant way. Please let me know if I just have to "deal with it". If you think it's valuable adding this, I wouldn't mind having a crack at a PR.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions