Question

I would like to use Nest to populate the completion suggestion field into an index. After reading this ElasticSearch blog post about implementing a completion field I see you can have the following properties:

  • array of inputs
  • single output
  • weight
  • payload

I am assuming that to load this data into an index I need to include an entity on my search object that contains the above fields?

Was it helpful?

Solution

I was able to finally load the completion field by creating several classes, and following the FluentMappingFullExample unit test, specifically the following part:

                    .Completion(s=>s
                    .Name(p=>p.Name.Suffix("completion"))
                    .IndexAnalyzer("standard")
                    .SearchAnalyzer("standard")
                    .MaxInputLength(20)
                    .Payloads()
                    .PreservePositionIncrements()
                    .PreserveSeparators()
                )

For my search type entity, I created a field called suggest and made it of type CompletionField.

 public class CompletionField
{
    public CompletionField()
    {
        Input = new List<string>();
    }

    public List<string> Input { get; set; }
    //public string Output { get; set; }
    public int Weight { get; set; }
    public Payload Payload { get; set; }
}

public class Payload
{
    public int ID { get; set; }
}

After I loaded my entity from the db using dapper, I then looped over the results and loaded my completion field with the appropriate inputs that I wanted. I was then able to successfully call the suggest API and query on this data. I hope this helps someone else.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top