How do I use the percolator capabilities of ES to match an incoming document with my query? my query is "biggest winner"
I'm using ES v6 and the same version of NEST lib.
this is my class
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; }
}
this is my setting
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")
));
}
I had to save the query, then I could search for a document
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)
)
)
);