2017-10-17 7 views
0

Je rencontre un problème de filtrage de source dans le client NEST.Source de filtrage NEST et création d'instances d'objet à l'aide du constructeur d'objet

Ceci est mon exemple de code:

var searchRequest = client.Search<Report>(analysisDescriptor 
    .Source(s => s 
    .Includes(i => i 
     .Fields(
     f => f.ReportId, 
     f => f.Abstract, 
     f => f.Title 
    ) 
    ) 
) 
    .Size(10)); 

analysisDescriptor est new SearchDescriptor<Report>() avec la logique métier pour la recherche de texte.

C'est ma classe avec constructeur:

Maintenant la question
public class Report 
{ 
    public Report(int reportId, string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 

    public int ReportId { get; } 
    public string Abstract { get; } 
    public string Title { get; } 
    /* Other fields */ 
} 

est que conduit tech ne veulent pas avoir set propriétés et que vous souhaitez avoir un constructeur à la place.

Le code ci-dessus près œuvres:

  1. reportId est attribué
  2. titre est attribué

Le problème est que Abstract champ n'est pas affecté parce que le constructeur l'a déclaré itemAbstract. Cela a été fait parce que abstract est un mot-clé réservé en C#. Si je change le nom du champ dans le constructeur à @abstract - cela fonctionne, mais ne semble pas juste parce que je dois utiliser le mot-clé réservé.

Changement Abstract à ItemAbstract ne semble pas une option parce que nous l'avons comme ça dans la base de données et cela nécessiterait encore plus de changements.

Donc, idéalement, je suis à la recherche d'un moyen de passer champ Abstract de mon searchRequest dans le constructeur Report comme itemAbstract. J'espère que cela a du sens.

Je suis ouvert à toute autre solution qui est propre et logique.

Répondre

2

Cela devrait fonctionner puisque NEST utilise simplement Json.net pour la sérialisation.

public Report(int reportId,[JsonProperty("abstract")]string itemAbstract, string title) 
    { 
    Abstract = itemAbstract; 
    ReportId = reportId; 
    Title = title; 
    /* Other fields */ 
    } 
+0

A travaillé comme un charme! –