Elasticsearch NEST — SortAsceding не сортирует документы

Я пытаюсь отсортировать набор результатов на основе имени поля. Но Sort не работает с типом string.

Пробный код: -

public class Company
{
    public long Number { get; set; }
    public string Name{ get; set; }
}

Моя проблема: сортировка не выполняется, когда я использую SortAscending API, как показано ниже.

var resultSet = client.Search<Article>(s => s
                            .Type("Company")
                            .From(0)
                            .Size(200)
                            .QueryString("Stack OverFlow")
                            .SortAscending(f => f.Name));

Примечание. Документы отображаются как отсортированные, если я устанавливаю имя поля как число (f => f.Number)

Пожалуйста помоги


person Dinesh Kumar P    schedule 28.02.2014    source источник
comment
Не могли бы вы привести пример данных, хранящихся в вашем индексе, и используемое вами сопоставление?   -  person paweloque    schedule 28.02.2014


Ответы (1)


Ваша проблема с сортировкой поля имени в вашем индексе, вероятно, связана с тем фактом, что поле анализируется/токенизируется. Из Руководства по сортировке Elasticsearch:

Для типов на основе строк поле, отсортированное по, не должно анализироваться/маркироваться.

Поэтому вам необходимо предоставить дополнительное поле, которое не анализируется/маркируется для выполнения вашей сортировки. Вы можете сделать это, добавив в свои документы дополнительное поле и установив сопоставление для этого типа/поля на not_analyzed, или вы можете использовать multi_field (теперь только fields в версии 1.x) в существующем поле имени. Пожалуйста, обратитесь к следующему для руководства о том, как выполнить любой из этих вариантов:

person Paige Cook    schedule 28.02.2014