Elasticsearch в сборе гнездо вложенные top_hits агрегации


У меня есть коллекция документов, проиндексированных в Elasticsearch. Образец один:

{
  "Id": 123,
  "Title": "Some Title",
  "Countries": [
    {
      "Id": 123,
      "Name": "United Kingdom"
    },
    {
      "Id": 124,
      "Name": "United State"
    },
    {
      "Id": 125,
      "Name": "Canada"
    }
  ]
}

А потом модели на C#:

public class Document
{
    public int Id { get; set; }
    public string Title { get; set; }
    public IEnumerable<Country> Countries { get; set; }
}

public class Country
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
}

Моя цель-построить фасетный поиск и граней стране, так я их строить:

public static IEnumerable<Country> GetCountries(this ISearchResponse<Document> response)
{
    return response
        .Aggs
        .Nested(Constants.Countries)
        .Terms(Constants.CountryCodes)
        .Buckets
        .Select(s => s.TopHits(Constants.Country).Documents<Country>().First());
}

Мой контроллер выглядит так:

public Facet GetDocumentFacets(DocumentRequest request)
{
    var descriptor = _analysisCatalogQueryBuilder.Build(request);

    var response = _elasticClient.Search<Model.Analysis>(descriptor.Size(0)
        .Aggregations(a => a
            .AggregateCountries()
            .AggregateDates()
            )
        );

    return new Facet
    {
        Categories = response.GetCategories(),
        Dates = response.GetDates()
    };
}

Это не работает медленно или неправильно. Я просто хочу знать, если есть что-то, что можно было бы улучшить.



280
0
задан 21 марта 2018 в 09:03 Источник Поделиться
Комментарии