如何使用NEST v6进行渗透

时间:2018-02-07 18:32:03

标签: c# elasticsearch nest elasticsearch-percolate

如何使用ES的过滤器功能将传入的文档与我的查询相匹配? 我的疑问是“最大赢家”

我正在使用ES v6和相同版本的NEST库。

这是我的班级

public class PercolatedQuery
{
    public string Subject { get; set; }

    public string Body { get; set; }

    public string URL { get; set; }

    public DateTime? Date { get; set; }

    public QueryContainer Query { get; set; }
}

这是我的设置

Uri node = new Uri("http://localhost:9200/");
    this.Settings = new ConnectionSettings(node)
        .DisableDirectStreaming()
        .DefaultIndex("mytestIndex");
    this.Client = new ElasticClient(this.Settings);
    if (!this.Client.IndexExists("mytestIndex").Exists)
    {
        this.Client.CreateIndex("mytestIndex", c => c
            .Settings(s => s
                .NumberOfShards(1)
                .NumberOfReplicas(0)
            )
            .Mappings(m => m
                .Map<PercolatedQuery>(mm => mm
                    .AutoMap()
                    .Properties(p => p
                        // map the query field as a percolator type
                        .Percolator(pp => pp
                            .Name(n => n.Query)
                        )
                    )
                )
            )
            );
        this.Client.Alias(a => a
            .Add(add => add
                .Index("mytestIndex")
                .Alias("testAlias")
            ));
    }

1 个答案:

答案 0 :(得分:0)

我必须保存查询,然后我可以搜索文档

        PercolatedQuery documentQuery = new PercolatedQuery
        {
            Id = "PercolatedQuery",
            Query = new MatchQuery
            {
                Field = Infer.Field<PercolatedQuery>(entry => entry.Body),
                Query = "healthcare biggest"
            }
        };
        Client.Index(documentQuery,
           d => d.Index("mytestIndex").Refresh(Refresh.WaitFor));

        PercolatedQuery document1 = new PercolatedQuery { Body = "healthcare biggest winner" };
        Client.Search<PercolatedQuery>(s => s
            .Query(q => q
                .Percolate(p => p
                    .Field(f => f.Query)
                    .Document(document1)
                )
            )
            );