Синтаксис Elasticsearch.NET NEST Object Initializer для запроса выделения

У меня есть:

        var result = _client.Search<ElasticFilm>(new SearchRequest("blaindex", "blatype")
        {
            From = 0,
            Size = 100,
            Query = titleQuery || pdfQuery,
            Source = new SourceFilter
            {
                Include = new []
                {
                    Property.Path<ElasticFilm>(p => p.Url),
                    Property.Path<ElasticFilm>(p => p.Title),
                    Property.Path<ElasticFilm>(p => p.Language),
                    Property.Path<ElasticFilm>(p => p.Details),
                    Property.Path<ElasticFilm>(p => p.Id)
                }
            },
            Timeout = "20000"
        });

И я пытаюсь добавить фильтр подсветки, но я не знаком с синтаксисом C# инициализатора объектов (OIS). Я проверил официальные страницы NEST и ТАК, но не могу найти ничего результаты конкретно для (OIS).

Я вижу свойство Highlight в классе Nest.SearchRequest, но у меня недостаточно опыта (наверное), чтобы просто построить из него то, что мне нужно — несколько примеров и пояснений о том, как использовать подсветку с OIS будет жарко!


person notsoobvious    schedule 25.05.2015    source источник


Ответы (1)


Это свободный синтаксис:

var response= client.Search<Document>(s => s
    .Query(q => q.Match(m => m.OnField(f => f.Name).Query("test")))
    .Highlight(h => h.OnFields(fields => fields.OnField(f => f.Name).PreTags("<tag>").PostTags("</tag>"))));

и это при инициализации объекта:

var searchRequest = new SearchRequest
{
    Query = new QueryContainer(new MatchQuery{Field = Property.Path<Document>(p => p.Name), Query = "test"}),
    Highlight = new HighlightRequest
    {
        Fields = new FluentDictionary<PropertyPathMarker, IHighlightField>
        {
            {
                Property.Path<Document>(p => p.Name),
                new HighlightField {PreTags = new List<string> {"<tag>"}, PostTags = new List<string> {"</tag>"}}
            }
        }
    }
};

var searchResponse = client.Search<Document>(searchRequest);

ОБНОВЛЕНИЕ

Синтаксис NEST 7.x:

var searchQuery = new SearchRequest
{
    Highlight = new Highlight
    {
        Fields = new FluentDictionary<Field, IHighlightField>()
            .Add(Nest.Infer.Field<Document>(d => d.Name),
                new HighlightField {PreTags = new[] {"<tag>"}, PostTags = new[] {"<tag>"}})
    }
};

Мой класс документа:

public class Document
{
    public int Id { get; set; }
    public string Name { get; set; } 
}  
person Rob    schedule 25.05.2015
comment
Класс PropertyPathMarker был удален из библиотеки NEST, начиная с версии 6. Есть идеи, как это будет сделано для более новых версий? - person CShark; 22.01.2020
comment
Очень признателен. Мне не хватает официальной документации, и я ищу более обширную документацию/учебные ресурсы по всему NEST API. Любую альтернативную документацию/учебные ресурсы, которые вы можете предложить? - person CShark; 22.01.2020
comment
Я думаю, что официальные документы получают с каждым разом лучше и лучше. Если вы не можете найти там никакой помощи, я думаю, хорошей идеей будет создать задачу в репозитории чтобы ребята знали, с чем борется сообщество :) - person Rob; 22.01.2020