2016-04-28 1 views
1

Je définis un index comme ci-dessous. Mais maintenant j'ai une exigence à cause de laquelle je dois modifier le style d'indexation. (Je dois ajouter le champ d'analyseur dans le code ci-dessous).Expressions LINQ pour la requête Elasticsearch NEST

Référence [Ma précédente question et sa réponse]: Elastic Search using NEST - Results different in debug and browser mode

Comment puis-je réécrire

var connectionSettings = new ConnectionSettings(pool) 
     .DefaultIndex(defaultIndex) 
     .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg")) 
     .PrettyJson() 
     .DisableDirectStreaming()); 

avec les paramètres de mappage comme ci-dessous.

{ 
    "mappings": { 
    "Class1": { 
     "properties": { 
     "Answer": { 
      "type": "string", 
      "analyzer": "english" 
     } 
     } 
    } 
    } 
} 

Ceci est mon point de vue sur la réponse:

settings = new ConnectionSettings(pool) 
       .DefaultIndex(defaultIndex) 
       .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg")) 
       .PrettyJson() 
       .DisableDirectStreaming(); 

      var descriptor = new CreateIndexDescriptor(defaultIndex) 
          .Mappings(ms => ms 
          .Map<Class1>(m => m 
          .Properties(ps => ps 
          .String(s=>s 
          .Name(n=>n.Ans) 
          .Analyzer("english"))))); 

Je pense que je manque un lien quelque part entre la création d'index et les correspondances. Bien qu'il n'a pas montré une erreur lors du codage, la sortie n'est pas comme prévu.

TIA

+0

Je viens d'essayer sur plugin Sense pour vérifier si elle fonctionne. Puis essayé de modifier un peu votre code en ajoutant '.MapPropertiesFor <>' après '.MapDefaultTypeNames (m => m.Add (typeof (Class1)," omg "))' Ce que je pensais être, après les noms par défaut à celui de class1, alors nous devons donner leurs propriétés, donc essayé pour '.MapProperties' – ASN

+0

Jetez un oeil à https://www.elastic.co/guide/en/elasticsearch/client/net-api/2.x /auto-map.html –

+0

Merci Russ. Je vais y jeter un coup d'œil et revenir avec la réponse. – ASN

Répondre

1

A CreateIndexDecriptor<T> est un descripteur pour créer un index, mais vous devez passer à la méthode IElasticClient.CreateIndex() afin de créer l'index dans ElasticSearch.

void Main() 
{ 
    var defaultIndex = "default-index"; 
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200")); 

    var settings = new ConnectionSettings(pool, new InMemoryConnection()) 
      .DefaultIndex(defaultIndex) 
      .MapDefaultTypeNames(m => m.Add(typeof(Class1), "omg")) 
      .PrettyJson() 
      .DisableDirectStreaming(); 

    var client = new ElasticClient(settings); 

    client.CreateIndex("new-index", c => c 
     .Mappings(ms => ms 
      .Map<Class1>(m => m 
       .Properties(ps => ps 
        .String(s => s 
         .Name(n => n.Ans) 
         .Analyzer("english") 
        ) 
       ) 
      ) 
     ) 
    ); 
} 

public class Class1 
{ 
    public string Ans { get; set;} 
} 

La demande à ElasticSearch ressemble

{ 
    "mappings": { 
    "omg": { 
     "properties": { 
     "ans": { 
      "type": "string", 
      "analyzer": "english" 
     } 
     } 
    } 
    } 
}