Выделение в функции Percolate написано в NEST Elasticsearch

У меня есть перколятная функция, написанная на NEST (C#). Я хочу включить функцию подсветки, но она не сработала. Перколятор работает нормально, но выделение ничего не возвращало, и ничего не найдено в документации NEST. Любая помощь очень ценится.

var searchResponseDoc = client.Search<PercolatedQuery>(s => s
           .Query(q => q
           .Percolate(f => f
             .Field(p => p.Query)
             .DocumentType<Document>() //I have a class called Document
             .Document(myDocument))) // myDocument is an object of type Document

           .Highlight(h => h
              .Fields(f => f
              .Field(p => p.Query))
              .PreTags("<em>")
              .PostTags("</em>")
              .FragmentSize(20)));

1 ответ

Решение

Документация Elasticsearch дает хороший пример того, как использовать перколят-запросы с подсветкой. Фильтры запросов с выделением работают немного по-другому в том, что Fields() в Highlight() должны быть поля в типе документа, которые будут выделены.

Например, учитывая

public class Document
{
    public string Content { get; set; }
}

Фильтр с выделением может выглядеть так

var searchResponseDoc = client.Search<PercolatedQuery>(s => s
    .Query(q => q
        .Percolate(f => f
            .Field(p => p.Query)
            .DocumentType<Document>() //I have a class called Document
            .Document(myDocument) // myDocument is an object of type Document
        )
    ) 
    .Highlight(h => h
        .Fields(f => f
            .Field(Infer.Field<Document>(ff => ff.Content))
        )
        .PreTags("<em>")
        .PostTags("</em>")
        .FragmentSize(20)
    )
);

Infer.Field<T>() используется, чтобы получить имя content поле на Document как Highlight<T>() строго типизирован к типу ответа, в этом случае, PercolatedQuery,

Другие вопросы по тегам