2014-06-07 4 views
2

Je suis en transition vers ElasticSearch sur mon site Web et j'utilise NEST comme interface C# .NET.NEST - Indexer des champs individuels

En écrivant du code pour indexer mon contenu, je n'arrive pas à comprendre comment mapper les champs individuellement. Supposons que je donne les résultats suivants:

var person = new Person 
{ 
    Id = "1", 
    Firstname = "Martijn", 
    Lastname = "Laarman", 
    Email = "[email protected]", 
    Posts = "50", 
    YearsOfExperience = "26" 

}; 

Plutôt que d'indexer l'ensemble de données entier à l'aide:

var index = client.Index(person); 

Je veux index FirstName et LastName afin qu'ils puissent être recherchés sur, mais je ne ai pas besoin du les autres champs doivent être dans l'index (autre que l'ID) car ils ne prendraient que de l'espace. Quelqu'un peut-il m'aider avec le code pour cartographier ces champs individuellement?

Répondre

5

Vous devez ajouter un mappage lorsque vous créez initialement votre index. Une façon vous pouvez le faire est à l'utilisation NEST attributs de votre classe comme ceci:

public class Person 
{ 
    public string Id { get; set; } 

    public string Firstname { get; set; } 

    public string Lastname { get; set; } 

    [ElasticProperty(Store=false, Index=FieldIndexOption.not_analyzed)] 
    public string Email { get; set; } 

    [ElasticProperty(Store = false, Index = FieldIndexOption.not_analyzed)] 
    public string Posts { get; set; } 

    [ElasticProperty(Store = false, Index = FieldIndexOption.not_analyzed)] 
    public string YearsOfExperience { get; set; } 
} 

Ensuite, vous créez votre index comme ceci:

client.CreateIndex("person", c => c.AddMapping<Person>(m => m.MapFromAttributes())); 

Au lieu d'utiliser des attributs, vous pouvez également mapper explicitement chaque champ:

client.CreateIndex("person", c => c.AddMapping<Person>(m => m 
    .MapFromAttributes() 
    .Properties(props => props 
     .String(s => s.Name(p => p.Email).Index(FieldIndexOption.not_analyzed).Store(false)) 
     .String(s => s.Name(p => p.Posts).Index(FieldIndexOption.not_analyzed).Store(false)) 
     .String(s => s.Name(p => p.YearsOfExperience).Index(FieldIndexOption.not_analyzed).Store(false))))); 

Vérifiez la NEST documentation pour plus d'informations, en particulier les sections Create Index et Put Mapping.

+0

Merci pour l'aide - la documentation semble à moitié mise à jour pour la nouvelle version. Dois-je alors appeler la ligne suivante: client.Index (personne, "personne", "chaîne", person.Id.ToString(), new IndexParameters {Refresh = true}); ajouter l'ensemble de données? – user1765523

+0

Oui, le code ci-dessus crée simplement votre index et configure votre mappage. Vous devez toujours indexer vos documents. –

+1

@GregMarzouka je pensais pas encore analysé les index sans analyser? il y a la 3ème option Index = FieldIndexOption.no. n'est pas celui-ci le bon pour désactiver l'indexation pour la propriété? – batmaci

Questions connexes