突出显示在NEST Elasticsearch中编写的Percolate函数

时间:2017-07-30 14:50:27

标签: elasticsearch nest elasticsearch-percolate

我有一个用NEST(c#)编写的percolate函数。我想启用突出显示功能但不起作用。过滤器工作正常,但突出显示没有返回任何内容,并且在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 个答案:

答案 0 :(得分:0)

Elasticsearch documentation gives a good example of how to use percolate queries with highlighting。通过突出显示工作进行渗透查询的方式略有不同,因为Fields()中的Highlight()应该是要突出显示的文档类型上的字段。

例如,给定

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

带突出显示的percolate查询可能看起来像

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>()用于获取contentDocument字段的名称,因为Highlight<T>()是强类型的响应类型,在本例中为PercolatedQuery }。